Browse Source

Follow-up fix, checking also "ws" and port 80 case

See gh-27097
pull/27193/head
Rossen Stoyanchev 4 years ago
parent
commit
0b1d14cdd9
  1. 3
      spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  2. 23
      spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

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

@ -881,7 +881,8 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { @@ -881,7 +881,8 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
"with the removeOnly=true. Request headers: " + headers);
}
if (this.scheme != null && ((this.scheme.equals("http") && "80".equals(this.port)) ||
if (this.scheme != null &&
(((this.scheme.equals("http") || this.scheme.equals("ws")) && "80".equals(this.port)) ||
((this.scheme.equals("https") || this.scheme.equals("wss")) && "443".equals(this.port)))) {
port(null);
}

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

@ -378,7 +378,7 @@ class UriComponentsBuilderTests { @@ -378,7 +378,7 @@ class UriComponentsBuilderTests {
@ParameterizedTest // gh-17368, gh-27097
@ValueSource(strings = {"https", "wss"})
void fromHttpRequestResetsPortBeforeSettingIt(String protocol) {
void fromHttpRequestResetsPort443(String protocol) {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("X-Forwarded-Proto", protocol);
request.addHeader("X-Forwarded-Host", "84.198.58.199");
@ -397,6 +397,27 @@ class UriComponentsBuilderTests { @@ -397,6 +397,27 @@ class UriComponentsBuilderTests {
assertThat(result.getPath()).isEqualTo("/rest/mobile/users/1");
}
@ParameterizedTest // gh-27097
@ValueSource(strings = {"http", "ws"})
void fromHttpRequestResetsPort80(String protocol) {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("X-Forwarded-Proto", protocol);
request.addHeader("X-Forwarded-Host", "84.198.58.199");
request.addHeader("X-Forwarded-Port", 80);
request.setScheme("http");
request.setServerName("example.com");
request.setServerPort(80);
request.setRequestURI("/path");
HttpRequest httpRequest = new ServletServerHttpRequest(request);
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
assertThat(result.getScheme()).isEqualTo(protocol);
assertThat(result.getHost()).isEqualTo("84.198.58.199");
assertThat(result.getPort()).isEqualTo(-1);
assertThat(result.getPath()).isEqualTo("/path");
}
@Test // SPR-14761
void fromHttpRequestWithForwardedIPv4Host() {
MockHttpServletRequest request = new MockHttpServletRequest();

Loading…
Cancel
Save