diff --git a/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilder.java b/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilder.java index fc9fa53b3..a2bc1e0cc 100755 --- a/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilder.java +++ b/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilder.java @@ -169,7 +169,13 @@ static UriComponentsBuilder getBuilder() { String header = request.getHeader("X-Forwarded-Host"); if (StringUtils.hasText(header)) { - builder.host(header); + if (StringUtils.countOccurrencesOf(header, ":") == 1) { + String[] hostAndPort = StringUtils.split(header, ":"); + builder.host(hostAndPort[0]); + builder.port(Integer.parseInt(hostAndPort[1])); + } else { + builder.host(header); + } } return builder; diff --git a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java index 595881a91..b52408a43 100644 --- a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java +++ b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java @@ -149,6 +149,14 @@ public void usesForwardedHostAsHostIfHeaderIsSet() { assertThat(link.getHref(), startsWith("http://somethingDifferent")); } + @Test + public void usesForwardedHostAndPortFromHeader() { + request.addHeader("X-Forwarded-Host", "localhost:8088"); + + Link link = linkTo(PersonControllerImpl.class).withSelfRel(); + assertThat(link.getHref(), startsWith("http://localhost:8088")); + } + /** * @see #26, #39 */