@Override public void doFilter( final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { final FilterPipeline filterPipeline = getFilterPipeline(); Context previous = GuiceFilter.localContext.get(); HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletRequest originalRequest = (previous != null) ? previous.getOriginalRequest() : request; try { RequestScoper.CloseableScope scope = new Context(originalRequest, request, response).open(); try { //dispatch across the servlet pipeline, ensuring web.xml's filterchain is honored filterPipeline.dispatch(servletRequest, servletResponse, filterChain); } finally { scope.close(); } } catch (IOException e) { throw e; } catch (ServletException e) { throw e; } catch (Exception e) { Throwables.propagate(e); } }
public final void testQueryInRequestUri_regex() throws Exception { final Injector injector = Guice.createInjector( new ServletModule() { @Override protected void configureServlets() { filterRegex("(.)*\\.html").through(TestFilter.class); serveRegex("(.)*\\.html").with(TestServlet.class); } }); final FilterPipeline pipeline = injector.getInstance(FilterPipeline.class); pipeline.initPipeline(null); //create ourselves a mock request with test URI HttpServletRequest requestMock = createMock(HttpServletRequest.class); expect(requestMock.getRequestURI()).andReturn("/index.html?query=params").atLeastOnce(); expect(requestMock.getContextPath()).andReturn("").anyTimes(); //dispatch request replay(requestMock); pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline(); verify(requestMock); assertEquals(1, doFilters); assertEquals(1, services); }
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
pipeline.dispatch(requestMock, null, createMock(FilterChain.class));
pipeline.dispatch(requestMock, null, createMock(FilterChain.class));
pipeline.dispatch(requestMock, null, createMock(FilterChain.class));
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
pipeline.dispatch(requestMock, null, createMock(FilterChain.class));
public final void testServletExceptionPrunesStack() throws Exception { Injector injector = Guice.createInjector( new ServletModule() { @Override protected void configureServlets() { filter("/").through(TestFilter.class); filter("/nothing").through(TestFilter.class); serve("/").with(ThrowingServlet.class); } }); HttpServletRequest request = newFakeHttpServletRequest(); FilterPipeline pipeline = injector.getInstance(FilterPipeline.class); pipeline.initPipeline(null); try { pipeline.dispatch(request, null, null); fail("expected exception"); } catch (ServletException ex) { for (StackTraceElement element : ex.getStackTrace()) { String className = element.getClassName(); assertTrue( "was: " + element, !className.equals(FilterChainInvocation.class.getName()) && !className.equals(FilterDefinition.class.getName())); } } }
pipeline.dispatch(requestMock, null, createMock(FilterChain.class)); pipeline.destroyPipeline();
public final void testFilterExceptionPrunesStack() throws Exception { Injector injector = Guice.createInjector( new ServletModule() { @Override protected void configureServlets() { filter("/").through(TestFilter.class); filter("/nothing").through(TestFilter.class); filter("/").through(ThrowingFilter.class); } }); HttpServletRequest request = newFakeHttpServletRequest(); FilterPipeline pipeline = injector.getInstance(FilterPipeline.class); pipeline.initPipeline(null); try { pipeline.dispatch(request, null, null); fail("expected exception"); } catch (ServletException ex) { for (StackTraceElement element : ex.getStackTrace()) { String className = element.getClassName(); assertTrue( "was: " + element, !className.equals(FilterChainInvocation.class.getName()) && !className.equals(FilterDefinition.class.getName())); } } }
private void runRequestForPath(FilterPipeline pipeline, String value, boolean matches) throws IOException, ServletException { assertEquals(0, doFilters); //create ourselves a mock request with test URI HttpServletRequest requestMock = control.createMock(HttpServletRequest.class); expect(requestMock.getRequestURI()).andReturn(value).anyTimes(); expect(requestMock.getContextPath()).andReturn("").anyTimes(); // dispatch request FilterChain filterChain = control.createMock(FilterChain.class); filterChain.doFilter(requestMock, null); control.replay(); pipeline.dispatch(requestMock, null, filterChain); control.verify(); control.reset(); if (matches) { assertEquals("filter was not run", 1, doFilters); doFilters = 0; } else { assertEquals("filter was run", 0, doFilters); } }
filterChain.doFilter(requestMock, null); control.replay(); pipeline.dispatch(requestMock, null, filterChain); pipeline.destroyPipeline(); control.verify();
filterChain.doFilter(requestMock, null); control.replay(); pipeline.dispatch(requestMock, null, filterChain); pipeline.destroyPipeline(); control.verify();
public void testFilterOrder() throws Exception { AtomicInteger counter = new AtomicInteger(); final CountFilter f1 = new CountFilter(counter); final CountFilter f2 = new CountFilter(counter); Injector injector = Guice.createInjector( new ServletModule() { @Override protected void configureServlets() { filter("/").through(f1); install( new ServletModule() { @Override protected void configureServlets() { filter("/").through(f2); } }); } }); HttpServletRequest request = newFakeHttpServletRequest(); final FilterPipeline pipeline = injector.getInstance(FilterPipeline.class); pipeline.initPipeline(null); pipeline.dispatch(request, null, newNoOpFilterChain()); assertEquals(0, f1.calledAt); assertEquals(1, f2.calledAt); }
pipeline.dispatch(requestMock, responseMock, filterChain); pipeline.destroyPipeline(); control.verify();
public void doFilter(final ServletRequest request, final ServletResponse response) throws IOException, ServletException { if (itr.hasNext()) { itr.next().dispatch(request, response, this); } else { defaultChain.doFilter(request, response); } } }