Fix X-Forwarded-* behavior in ServletUriComponentsBuilder
When using ServletUriComponentsBuilder.fromRequest, this change makes sure that: * the default port is used when the "X-Forwarded-Host" header is set and no port is defined in that header value * to use the scheme defined in the "X-Forwarded-Proto" header if set Issue: SPR-11872
This commit is contained in:
@@ -133,6 +133,33 @@ public class ServletUriComponentsBuilderTests {
|
||||
assertEquals(9090, uriComponents.getPort());
|
||||
}
|
||||
|
||||
// SPR-11872
|
||||
|
||||
@Test
|
||||
public void fromRequestWithForwardedHostWithDefaultPort() {
|
||||
this.request.setServerPort(10080);
|
||||
this.request.addHeader("X-Forwarded-Host", "example.org");
|
||||
UriComponents result = ServletUriComponentsBuilder.fromRequest(request).build();
|
||||
|
||||
assertEquals("example.org", result.getHost());
|
||||
assertEquals("should have used the default port of the forwarded request",
|
||||
-1, result.getPort());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromRequestWithForwardedHostWithForwardedScheme() {
|
||||
this.request.setServerPort(10080);
|
||||
this.request.addHeader("X-Forwarded-Proto", "https");
|
||||
this.request.addHeader("X-Forwarded-Host", "example.org");
|
||||
UriComponents result = ServletUriComponentsBuilder.fromRequest(request).build();
|
||||
|
||||
assertEquals("example.org", result.getHost());
|
||||
assertEquals("should have derived scheme from header",
|
||||
"https", result.getScheme());
|
||||
assertEquals("should have used the default port of the forwarded request",
|
||||
-1, result.getPort());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromContextPath() {
|
||||
request.setRequestURI("/mvc-showcase/data/param");
|
||||
|
||||
Reference in New Issue
Block a user