Support Forwarded-Header in UriComponentsBuilder
This commit introduces support for RFC 7239: Forwarded HTTP Extension in the UriComponentsBuilder. Unfortunately, RFC 7239 is not a complete replacement for the X-Forwarded-* headers: specifically, there is not direct replacement for X-Forwarded-Port. The JIRA contains more information. Issue: SPR-11856
This commit is contained in:
committed by
Rossen Stoyanchev
parent
b02352d30f
commit
4611d058c8
@@ -673,4 +673,72 @@ public class UriComponentsBuilderTests {
|
||||
assertEquals("f2", result2.getFragment());
|
||||
}
|
||||
|
||||
// SPR-11856
|
||||
|
||||
@Test
|
||||
public void fromHttpRequestForwardedHeader() throws Exception {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Forwarded", "proto=https; host=84.198.58.199");
|
||||
request.setScheme("http");
|
||||
request.setServerName("example.com");
|
||||
request.setRequestURI("/rest/mobile/users/1");
|
||||
|
||||
HttpRequest httpRequest = new ServletServerHttpRequest(request);
|
||||
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
|
||||
|
||||
assertEquals("https", result.getScheme());
|
||||
assertEquals("84.198.58.199", result.getHost());
|
||||
assertEquals("/rest/mobile/users/1", result.getPath());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromHttpRequestForwardedHeaderQuoted() throws Exception {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Forwarded", "proto=\"https\"; host=\"84.198.58.199\"");
|
||||
request.setScheme("http");
|
||||
request.setServerName("example.com");
|
||||
request.setRequestURI("/rest/mobile/users/1");
|
||||
|
||||
HttpRequest httpRequest = new ServletServerHttpRequest(request);
|
||||
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
|
||||
|
||||
assertEquals("https", result.getScheme());
|
||||
assertEquals("84.198.58.199", result.getHost());
|
||||
assertEquals("/rest/mobile/users/1", result.getPath());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromHttpRequestMultipleForwardedHeader() throws Exception {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Forwarded", "host=84.198.58.199;proto=https");
|
||||
request.addHeader("Forwarded", "proto=ftp; host=1.2.3.4");
|
||||
request.setScheme("http");
|
||||
request.setServerName("example.com");
|
||||
request.setRequestURI("/rest/mobile/users/1");
|
||||
|
||||
HttpRequest httpRequest = new ServletServerHttpRequest(request);
|
||||
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
|
||||
|
||||
assertEquals("https", result.getScheme());
|
||||
assertEquals("84.198.58.199", result.getHost());
|
||||
assertEquals("/rest/mobile/users/1", result.getPath());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromHttpRequestMultipleForwardedHeaderComma() throws Exception {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Forwarded", "host=84.198.58.199 ;proto=https, proto=ftp; host=1.2.3.4");
|
||||
request.setScheme("http");
|
||||
request.setServerName("example.com");
|
||||
request.setRequestURI("/rest/mobile/users/1");
|
||||
|
||||
HttpRequest httpRequest = new ServletServerHttpRequest(request);
|
||||
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
|
||||
|
||||
assertEquals("https", result.getScheme());
|
||||
assertEquals("84.198.58.199", result.getHost());
|
||||
assertEquals("/rest/mobile/users/1", result.getPath());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user