Skip to content

Commit

Permalink
Follow-up fix, checking also "ws" and port 80 case
Browse files Browse the repository at this point in the history
  • Loading branch information
rstoyanchev committed Jul 16, 2021
1 parent ca262ea commit 0b1d14c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
Expand Up @@ -881,7 +881,8 @@ else if (isForwardedSslOn(headers)) {
"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);
}
Expand Down
Expand Up @@ -378,7 +378,7 @@ void fromHttpRequest() {

@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");
Expand All @@ -397,6 +397,27 @@ void fromHttpRequestResetsPortBeforeSettingIt(String protocol) {
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();
Expand Down

0 comments on commit 0b1d14c

Please sign in to comment.