Browse Source

Merge branch '5.2.x' into master

pull/25757/head
Arjen Poutsma 5 years ago
parent
commit
3bd96a665f
  1. 5
      spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  2. 20
      spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

5
spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java

@ -806,8 +806,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { @@ -806,8 +806,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
try {
String forwardedHeader = headers.getFirst("Forwarded");
if (StringUtils.hasText(forwardedHeader)) {
String forwardedToUse = StringUtils.tokenizeToStringArray(forwardedHeader, ",")[0];
Matcher matcher = FORWARDED_PROTO_PATTERN.matcher(forwardedToUse);
Matcher matcher = FORWARDED_PROTO_PATTERN.matcher(forwardedHeader);
if (matcher.find()) {
scheme(matcher.group(1).trim());
port(null);
@ -816,7 +815,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { @@ -816,7 +815,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
scheme("https");
port(null);
}
matcher = FORWARDED_HOST_PATTERN.matcher(forwardedToUse);
matcher = FORWARDED_HOST_PATTERN.matcher(forwardedHeader);
if (matcher.find()) {
adaptForwardedHost(matcher.group(1).trim());
}

20
spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

@ -1120,6 +1120,26 @@ class UriComponentsBuilderTests { @@ -1120,6 +1120,26 @@ class UriComponentsBuilderTests {
assertThat(result.toUriString()).isEqualTo("https://example.com/rest/mobile/users/1");
}
@Test // gh-25737
void fromHttpRequestForwardedHeaderComma() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("Forwarded", "for=192.0.2.0,for=192.0.2.1;proto=https;host=192.0.2.3:9090");
request.setScheme("http");
request.setServerPort(8080);
request.setServerName("example.com");
request.setRequestURI("/rest/mobile/users/1");
HttpRequest httpRequest = new ServletServerHttpRequest(request);
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
assertThat(result.getScheme()).isEqualTo("https");
assertThat(result.getHost()).isEqualTo("192.0.2.3");
assertThat(result.getPath()).isEqualTo("/rest/mobile/users/1");
assertThat(result.getPort()).isEqualTo(9090);
assertThat(result.toUriString()).isEqualTo("https://192.0.2.3:9090/rest/mobile/users/1");
}
@Test // SPR-16364
void uriComponentsNotEqualAfterNormalization() {
UriComponents uri1 = UriComponentsBuilder.fromUriString("http://test.com").build().normalize();

Loading…
Cancel
Save