use of javax.servlet.http.HttpServletResponseWrapper in project spring-boot by spring-projects.
the class ErrorPageFilterTests method responseUncommittedWithoutErrorPage.
@Test
public void responseUncommittedWithoutErrorPage() throws Exception {
this.chain = new MockFilterChain() {
@Override
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
((HttpServletResponse) response).sendError(400, "BAD");
super.doFilter(request, response);
}
};
this.filter.doFilter(this.request, this.response, this.chain);
assertThat(this.chain.getRequest()).isEqualTo(this.request);
assertThat(((HttpServletResponseWrapper) this.chain.getResponse()).getResponse()).isEqualTo(this.response);
assertThat(((HttpServletResponseWrapper) this.chain.getResponse()).getStatus()).isEqualTo(400);
assertThat(this.response.getForwardedUrl()).isNull();
assertThat(this.response.isCommitted()).isTrue();
}
use of javax.servlet.http.HttpServletResponseWrapper in project spring-boot by spring-projects.
the class ErrorPageFilterTests method nestedServletExceptionIsUnwrapped.
@Test
public void nestedServletExceptionIsUnwrapped() throws Exception {
this.filter.addErrorPages(new ErrorPage(RuntimeException.class, "/500"));
this.chain = new MockFilterChain() {
@Override
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
super.doFilter(request, response);
throw new NestedServletException("Wrapper", new RuntimeException("BAD"));
}
};
this.filter.doFilter(this.request, this.response, this.chain);
assertThat(((HttpServletResponseWrapper) this.chain.getResponse()).getStatus()).isEqualTo(500);
assertThat(this.request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE)).isEqualTo(500);
assertThat(this.request.getAttribute(RequestDispatcher.ERROR_MESSAGE)).isEqualTo("BAD");
Map<String, Object> requestAttributes = getAttributesForDispatch("/500");
assertThat(requestAttributes.get(RequestDispatcher.ERROR_EXCEPTION_TYPE)).isEqualTo(RuntimeException.class);
assertThat(requestAttributes.get(RequestDispatcher.ERROR_EXCEPTION)).isInstanceOf(RuntimeException.class);
assertThat(this.request.getAttribute(RequestDispatcher.ERROR_EXCEPTION_TYPE)).isNull();
assertThat(this.request.getAttribute(RequestDispatcher.ERROR_EXCEPTION)).isNull();
assertThat(this.request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI)).isEqualTo("/test/path");
assertThat(this.response.isCommitted()).isTrue();
assertThat(this.response.getForwardedUrl()).isEqualTo("/500");
}
use of javax.servlet.http.HttpServletResponseWrapper in project spring-boot by spring-projects.
the class ErrorPageFilterTests method unauthorizedWithErrorPath.
@Test
public void unauthorizedWithErrorPath() throws Exception {
this.filter.addErrorPages(new ErrorPage("/error"));
this.chain = new MockFilterChain() {
@Override
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
((HttpServletResponse) response).sendError(401, "UNAUTHORIZED");
super.doFilter(request, response);
}
};
this.filter.doFilter(this.request, this.response, this.chain);
assertThat(this.chain.getRequest()).isEqualTo(this.request);
HttpServletResponseWrapper wrapper = (HttpServletResponseWrapper) this.chain.getResponse();
assertThat(wrapper.getResponse()).isEqualTo(this.response);
assertThat(this.response.isCommitted()).isTrue();
assertThat(wrapper.getStatus()).isEqualTo(401);
// The real response has to be 401 as well...
assertThat(this.response.getStatus()).isEqualTo(401);
assertThat(this.response.getForwardedUrl()).isEqualTo("/error");
}
use of javax.servlet.http.HttpServletResponseWrapper in project guice by google.
the class ServletTest method testRequestAndResponseBindings_matchesPassedParameters.
public void testRequestAndResponseBindings_matchesPassedParameters() throws Exception {
final int[] filterInvoked = new int[1];
final boolean[] servletInvoked = new boolean[1];
createInjector(new ServletModule() {
@Override
protected void configureServlets() {
final HttpServletRequest[] previousReq = new HttpServletRequest[1];
final HttpServletResponse[] previousResp = new HttpServletResponse[1];
final Provider<ServletRequest> servletReqProvider = getProvider(ServletRequest.class);
final Provider<HttpServletRequest> reqProvider = getProvider(HttpServletRequest.class);
final Provider<ServletResponse> servletRespProvider = getProvider(ServletResponse.class);
final Provider<HttpServletResponse> respProvider = getProvider(HttpServletResponse.class);
Filter filter = new Filter() {
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
filterInvoked[0]++;
assertSame(req, servletReqProvider.get());
assertSame(req, reqProvider.get());
if (previousReq[0] != null) {
assertEquals(req, previousReq[0]);
}
assertSame(resp, servletRespProvider.get());
assertSame(resp, respProvider.get());
if (previousResp[0] != null) {
assertEquals(resp, previousResp[0]);
}
chain.doFilter(previousReq[0] = new HttpServletRequestWrapper((HttpServletRequest) req), previousResp[0] = new HttpServletResponseWrapper((HttpServletResponse) resp));
assertSame(req, reqProvider.get());
assertSame(resp, respProvider.get());
}
@Override
public void destroy() {
}
};
filter("/*").through(filter);
// filter twice to test wrapping in filters
filter("/*").through(filter);
serve("/*").with(new HttpServlet() {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
servletInvoked[0] = true;
assertSame(req, servletReqProvider.get());
assertSame(req, reqProvider.get());
assertSame(resp, servletRespProvider.get());
assertSame(resp, respProvider.get());
}
});
}
});
GuiceFilter filter = new GuiceFilter();
filter.doFilter(newFakeHttpServletRequest(), newFakeHttpServletResponse(), new FilterChain() {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) {
throw new IllegalStateException("Shouldn't get here");
}
});
assertEquals(2, filterInvoked[0]);
assertTrue(servletInvoked[0]);
}
use of javax.servlet.http.HttpServletResponseWrapper in project guice by google.
the class ServletTest method testRequestAndResponseBindings_wrappingFilter.
public void testRequestAndResponseBindings_wrappingFilter() throws Exception {
final HttpServletRequest request = newFakeHttpServletRequest();
final ImmutableMap<String, String[]> wrappedParamMap = ImmutableMap.of("wrap", new String[] { "a", "b" });
final HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request) {
@Override
public Map getParameterMap() {
return wrappedParamMap;
}
@Override
public Object getAttribute(String attr) {
// Ensure that attributes are stored on the original request object.
throw new UnsupportedOperationException();
}
};
final HttpServletResponse response = newFakeHttpServletResponse();
final HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response);
final boolean[] filterInvoked = new boolean[1];
final Injector injector = createInjector(new ServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(new Filter() {
@Inject
Provider<ServletRequest> servletReqProvider;
@Inject
Provider<HttpServletRequest> reqProvider;
@Inject
Provider<ServletResponse> servletRespProvider;
@Inject
Provider<HttpServletResponse> respProvider;
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
filterInvoked[0] = true;
assertSame(req, servletReqProvider.get());
assertSame(req, reqProvider.get());
assertSame(resp, servletRespProvider.get());
assertSame(resp, respProvider.get());
chain.doFilter(requestWrapper, responseWrapper);
assertSame(req, reqProvider.get());
assertSame(resp, respProvider.get());
}
@Override
public void destroy() {
}
});
}
});
GuiceFilter filter = new GuiceFilter();
final boolean[] chainInvoked = new boolean[1];
FilterChain filterChain = new FilterChain() {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) {
chainInvoked[0] = true;
assertSame(requestWrapper, servletRequest);
assertSame(requestWrapper, injector.getInstance(ServletRequest.class));
assertSame(requestWrapper, injector.getInstance(HTTP_REQ_KEY));
assertSame(responseWrapper, servletResponse);
assertSame(responseWrapper, injector.getInstance(ServletResponse.class));
assertSame(responseWrapper, injector.getInstance(HTTP_RESP_KEY));
assertSame(servletRequest.getParameterMap(), injector.getInstance(REQ_PARAMS_KEY));
InRequest inRequest = injector.getInstance(InRequest.class);
assertSame(inRequest, injector.getInstance(InRequest.class));
}
};
filter.doFilter(request, response, filterChain);
assertTrue(chainInvoked[0]);
assertTrue(filterInvoked[0]);
}
Aggregations