Skip to content

Commit 0b1d14c

Browse files
committed
Follow-up fix, checking also "ws" and port 80 case
See gh-27097
1 parent ca262ea commit 0b1d14c

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,8 @@ else if (isForwardedSslOn(headers)) {
881881
"with the removeOnly=true. Request headers: " + headers);
882882
}
883883

884-
if (this.scheme != null && ((this.scheme.equals("http") && "80".equals(this.port)) ||
884+
if (this.scheme != null &&
885+
(((this.scheme.equals("http") || this.scheme.equals("ws")) && "80".equals(this.port)) ||
885886
((this.scheme.equals("https") || this.scheme.equals("wss")) && "443".equals(this.port)))) {
886887
port(null);
887888
}

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

+22-1
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ void fromHttpRequest() {
378378

379379
@ParameterizedTest // gh-17368, gh-27097
380380
@ValueSource(strings = {"https", "wss"})
381-
void fromHttpRequestResetsPortBeforeSettingIt(String protocol) {
381+
void fromHttpRequestResetsPort443(String protocol) {
382382
MockHttpServletRequest request = new MockHttpServletRequest();
383383
request.addHeader("X-Forwarded-Proto", protocol);
384384
request.addHeader("X-Forwarded-Host", "84.198.58.199");
@@ -397,6 +397,27 @@ void fromHttpRequestResetsPortBeforeSettingIt(String protocol) {
397397
assertThat(result.getPath()).isEqualTo("/rest/mobile/users/1");
398398
}
399399

400+
@ParameterizedTest // gh-27097
401+
@ValueSource(strings = {"http", "ws"})
402+
void fromHttpRequestResetsPort80(String protocol) {
403+
MockHttpServletRequest request = new MockHttpServletRequest();
404+
request.addHeader("X-Forwarded-Proto", protocol);
405+
request.addHeader("X-Forwarded-Host", "84.198.58.199");
406+
request.addHeader("X-Forwarded-Port", 80);
407+
request.setScheme("http");
408+
request.setServerName("example.com");
409+
request.setServerPort(80);
410+
request.setRequestURI("/path");
411+
412+
HttpRequest httpRequest = new ServletServerHttpRequest(request);
413+
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
414+
415+
assertThat(result.getScheme()).isEqualTo(protocol);
416+
assertThat(result.getHost()).isEqualTo("84.198.58.199");
417+
assertThat(result.getPort()).isEqualTo(-1);
418+
assertThat(result.getPath()).isEqualTo("/path");
419+
}
420+
400421
@Test // SPR-14761
401422
void fromHttpRequestWithForwardedIPv4Host() {
402423
MockHttpServletRequest request = new MockHttpServletRequest();

0 commit comments

Comments
 (0)