Skip to content

Commit 88a1448

Browse files
committed
Support comma-separated X-Forwarded-Port
Issue: SPR-12813
1 parent 624790a commit 88a1448

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,8 @@ public static UriComponentsBuilder fromHttpRequest(HttpRequest request) {
297297

298298
String portHeader = request.getHeaders().getFirst("X-Forwarded-Port");
299299
if (StringUtils.hasText(portHeader)) {
300-
port = Integer.parseInt(portHeader);
300+
String[] ports = StringUtils.commaDelimitedListToStringArray(portHeader);
301+
port = Integer.parseInt(ports[0]);
301302
}
302303

303304
String protocolHeader = request.getHeaders().getFirst("X-Forwarded-Proto");

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,23 @@ public void fromHttpRequestWithForwardedProtoAndDefaultPort() {
399399
assertEquals("https://84.198.58.199/mvc-showcase", result.toString());
400400
}
401401

402+
// SPR-12813
402403

404+
@Test
405+
public void fromHttpRequestWithForwardedPortMultiValueHeader() {
406+
MockHttpServletRequest request = new MockHttpServletRequest();
407+
request.setScheme("http");
408+
request.setServerName("localhost");
409+
request.setServerPort(9090);
410+
request.setRequestURI("/mvc-showcase");
411+
request.addHeader("X-Forwarded-Host", "a.example.org");
412+
request.addHeader("X-Forwarded-Port", "80,52022");
403413

414+
HttpRequest httpRequest = new ServletServerHttpRequest(request);
415+
UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build();
416+
417+
assertEquals("http://a.example.org/mvc-showcase", result.toString());
418+
}
404419

405420
@Test
406421
public void path() throws URISyntaxException {

0 commit comments

Comments
 (0)