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:
Brian Clozel
2014-07-11 00:55:17 +02:00
parent 2f371e5aeb
commit 2c77de10dd
2 changed files with 33 additions and 0 deletions

View File

@@ -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");