Require choice between Forwarded and X-Forwarded headers

This commit introduces a constructor argument to select whether
to use the standard "Forwarded" header or the "X-Forwarded-*"
alternative headers. A separate property enables support for
X-Forwarded-Prefix.

Closes gh-37072
This commit is contained in:
rstoyanchev
2026-07-23 12:15:24 +03:00
parent 68862530fb
commit 31c37d4f2c
12 changed files with 270 additions and 158 deletions
@@ -210,7 +210,7 @@ class MvcUriComponentsBuilderTests {
// SPR-16668
private void adaptRequestFromForwardedHeaders() throws Exception {
MockFilterChain chain = new MockFilterChain();
new ForwardedHeaderFilter().doFilter(this.request, new MockHttpServletResponse(), chain);
new ForwardedHeaderFilter(false).doFilter(this.request, new MockHttpServletResponse(), chain);
HttpServletRequest adaptedRequest = (HttpServletRequest) chain.getRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(adaptedRequest));
}
@@ -219,7 +219,9 @@ class ServletUriComponentsBuilderTests {
// SPR-16668
private HttpServletRequest adaptFromForwardedHeaders(HttpServletRequest request) throws Exception {
MockFilterChain chain = new MockFilterChain();
new ForwardedHeaderFilter().doFilter(request, new MockHttpServletResponse(), chain);
ForwardedHeaderFilter filter = new ForwardedHeaderFilter(false);
filter.setUseForwardedPrefix(true);
filter.doFilter(request, new MockHttpServletResponse(), chain);
return (HttpServletRequest) chain.getRequest();
}