From 88a14488a194f3795996ba2ac1bf02af639cd7e9 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 13 Mar 2015 09:56:43 -0400 Subject: [PATCH] Support comma-separated X-Forwarded-Port Issue: SPR-12813 --- .../web/util/UriComponentsBuilder.java | 3 ++- .../web/util/UriComponentsBuilderTests.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index 48c4aa07ae..afb02aceb9 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -297,7 +297,8 @@ public class UriComponentsBuilder implements Cloneable { String portHeader = request.getHeaders().getFirst("X-Forwarded-Port"); if (StringUtils.hasText(portHeader)) { - port = Integer.parseInt(portHeader); + String[] ports = StringUtils.commaDelimitedListToStringArray(portHeader); + port = Integer.parseInt(ports[0]); } String protocolHeader = request.getHeaders().getFirst("X-Forwarded-Proto"); diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java index a4ea70e377..a67e4158de 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java @@ -399,8 +399,23 @@ public class UriComponentsBuilderTests { assertEquals("https://84.198.58.199/mvc-showcase", result.toString()); } + // SPR-12813 + @Test + public void fromHttpRequestWithForwardedPortMultiValueHeader() { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setScheme("http"); + request.setServerName("localhost"); + request.setServerPort(9090); + request.setRequestURI("/mvc-showcase"); + request.addHeader("X-Forwarded-Host", "a.example.org"); + request.addHeader("X-Forwarded-Port", "80,52022"); + HttpRequest httpRequest = new ServletServerHttpRequest(request); + UriComponents result = UriComponentsBuilder.fromHttpRequest(httpRequest).build(); + + assertEquals("http://a.example.org/mvc-showcase", result.toString()); + } @Test public void path() throws URISyntaxException {