@Override protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { final RequestTrackingContextValve result = super.createRequestTrackingContextValve(sessionCookieName); result.setAsyncSupported(true); return result; } @Override
@Test public final void testGetSessionCookieName() throws IOException, ServletException { final RequestTrackingContextValve cut = new RequestTrackingContextValve("foo", _service); assertEquals(cut.getSessionCookieName(), "foo"); }
/** * Is used to determine if this thread / the current request already hit the application or if this method * invocation comes from the container. */ private boolean isContainerSessionLookup() { return !_trackingContextValve.wasInvokedWith(_currentRequest.get()); }
protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { return new RequestTrackingContextValve(sessionCookieName, this); }
/** * {@inheritDoc} */ @Override public void invoke( final Request request, final Response response ) throws IOException, ServletException { final Object processRequest = request.getNote(RequestTrackingHostValve.REQUEST_PROCESS); if(processRequest != Boolean.TRUE) { request.setNote(INVOKED, Boolean.TRUE); try { getNext().invoke( request, response ); } finally { request.setNote(RequestTrackingHostValve.REQUEST_PROCESSED, Boolean.TRUE); } } else { boolean sessionIdChanged = false; try { request.setNote(INVOKED, Boolean.TRUE); sessionIdChanged = changeRequestedSessionId( request, response ); getNext().invoke( request, response ); } finally { request.setNote(RequestTrackingHostValve.REQUEST_PROCESSED, Boolean.TRUE); request.setNote(RequestTrackingHostValve.SESSION_ID_CHANGED, Boolean.valueOf(sessionIdChanged)); } } }
@Test public final void testRequestIsMarkedAsProcessed() throws IOException, ServletException { _sessionTrackerValve.invoke( _request, _response ); verify(_request).setNote(eq(RequestTrackingHostValve.REQUEST_PROCESSED), eq(Boolean.TRUE)); }
@BeforeMethod public void setUp() throws Exception { _service = mock( MemcachedSessionService.class ); _sessionTrackerValve = createSessionTrackerValve(); _nextValve = mock( Valve.class ); _sessionTrackerValve.setNext( _nextValve ); _request = mock( Request.class ); _response = mock( Response.class ); when(_request.getNote(eq(RequestTrackingHostValve.REQUEST_PROCESS))).thenReturn(Boolean.TRUE); }
@Nonnull protected RequestTrackingContextValve createSessionTrackerValve() { return new RequestTrackingContextValve("foo", _service); }
/** * {@inheritDoc} */ @Override public void invoke( final Request request, final Response response ) throws IOException, ServletException { final Object processRequest = request.getNote(RequestTrackingHostValve.REQUEST_PROCESS); if(processRequest != Boolean.TRUE) { request.setNote(INVOKED, Boolean.TRUE); try { getNext().invoke( request, response ); } finally { request.setNote(RequestTrackingHostValve.REQUEST_PROCESSED, Boolean.TRUE); } } else { boolean sessionIdChanged = false; try { request.setNote(INVOKED, Boolean.TRUE); sessionIdChanged = changeRequestedSessionId( request, response ); getNext().invoke( request, response ); } finally { request.setNote(RequestTrackingHostValve.REQUEST_PROCESSED, Boolean.TRUE); request.setNote(RequestTrackingHostValve.SESSION_ID_CHANGED, Boolean.valueOf(sessionIdChanged)); } } }
@Test public final void testChangeSessionIdForRelocatedSession() throws IOException, ServletException { final String sessionId = "bar"; final String newSessionId = "newId"; when( _request.getRequestedSessionId() ).thenReturn( sessionId ); when( _service.changeSessionIdOnMemcachedFailover( eq( sessionId ) ) ).thenReturn( newSessionId ); _sessionTrackerValve.invoke( _request, _response ); verify( _request ).changeSessionId( eq( newSessionId ) ); verify(_request).setNote(eq(RequestTrackingHostValve.SESSION_ID_CHANGED), eq(Boolean.TRUE)); }
@Override protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { final RequestTrackingContextValve result = super.createRequestTrackingContextValve(sessionCookieName); result.setAsyncSupported(true); return result; } @Override
protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { return new RequestTrackingContextValve(sessionCookieName, this); }
/** * Is used to determine if this thread / the current request already hit the application or if this method * invocation comes from the container. */ private boolean isContainerSessionLookup() { return !_trackingContextValve.wasInvokedWith(_currentRequest.get()); }
@Override protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { final RequestTrackingContextValve result = super.createRequestTrackingContextValve(sessionCookieName); result.setAsyncSupported(true); return result; } @Override
@Override protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { final RequestTrackingContextValve result = super.createRequestTrackingContextValve(sessionCookieName); result.setAsyncSupported(true); return result; } @Override
@Override protected RequestTrackingContextValve createRequestTrackingContextValve(final String sessionCookieName) { final RequestTrackingContextValve result = super.createRequestTrackingContextValve(sessionCookieName); result.setAsyncSupported(true); return result; } @Override