Add ForwardedHeaderFilter requestOnly

Add an option for ForwardedHeaderFilter to only process the
HttpServletRequest. This means that HttpServletResponse.sendRedirect will
only work when the application is conifgured to use relative redirects
using Servlet Container specific setup.

Issue: SPR-15717
This commit is contained in:
Rob Winch
2017-07-18 14:31:56 -05:00
committed by Rossen Stoyanchev
parent 147368eccc
commit 5f868b493a
2 changed files with 38 additions and 1 deletions

View File

@@ -403,6 +403,26 @@ public class ForwardedHeaderFilterTests {
assertEquals("../foo/bar", redirectedUrl);
}
@Test
public void sendRedirectWhenRequestOnlyAndXForwardedThenUsesRelativeRedirects() throws Exception {
this.request.addHeader(X_FORWARDED_PROTO, "https");
this.request.addHeader(X_FORWARDED_HOST, "example.com");
this.request.addHeader(X_FORWARDED_PORT, "443");
this.filter.setRequestOnly(true);
String location = sendRedirect("/a");
assertEquals("/a", location);
}
@Test
public void sendRedirectWhenRequestOnlyAndNoXForwardedThenUsesRelativeRedirects() throws Exception {
this.filter.setRequestOnly(true);
String location = sendRedirect("/a");
assertEquals("/a", location);
}
private String sendRedirect(final String location) throws ServletException, IOException {
MockHttpServletResponse response = doWithFiltersAndGetResponse(this.filter, new OncePerRequestFilter() {