From f5b5f9a639311cf9614395a3f899c866869e0adb Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Tue, 28 Jan 2025 15:49:26 +0000 Subject: [PATCH] Fix forwarded host formatting Follow-up to recent commit 75e2e2c3c7eba761f7d6984b8c66ffea8ace0fc1 Closes gh-34253 --- .../org/springframework/web/util/ForwardedHeaderUtils.java | 3 ++- .../web/filter/ForwardedHeaderFilterTests.java | 4 ++-- .../web/server/adapter/ForwardedHeaderTransformerTests.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/ForwardedHeaderUtils.java b/spring-web/src/main/java/org/springframework/web/util/ForwardedHeaderUtils.java index 7ccd3c1b28..bf0b4f58c2 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ForwardedHeaderUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/ForwardedHeaderUtils.java @@ -181,7 +181,8 @@ public abstract class ForwardedHeaderUtils { String forHeader = headers.getFirst("X-Forwarded-For"); if (StringUtils.hasText(forHeader)) { String host = StringUtils.tokenizeToStringArray(forHeader, ",")[0]; - host = (!host.startsWith("[") && !host.endsWith("]") ? "[" + host + "]" : host); + boolean ipv6 = (host.indexOf(':') != -1); + host = (ipv6 && !host.startsWith("[") && !host.endsWith("]") ? "[" + host + "]" : host); return InetSocketAddress.createUnresolved(host, port); } diff --git a/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java index eba97f020e..f34a754c99 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java @@ -481,7 +481,7 @@ class ForwardedHeaderFilterTests { request.addHeader(X_FORWARDED_FOR, "203.0.113.195"); HttpServletRequest actual = filterAndGetWrappedRequest(); - assertThat(actual.getRemoteAddr()).isEqualTo(actual.getRemoteHost()).isEqualTo("[203.0.113.195]"); + assertThat(actual.getRemoteAddr()).isEqualTo(actual.getRemoteHost()).isEqualTo("203.0.113.195"); assertThat(actual.getRemotePort()).isEqualTo(MockHttpServletRequest.DEFAULT_SERVER_PORT); } @@ -490,7 +490,7 @@ class ForwardedHeaderFilterTests { request.addHeader(X_FORWARDED_FOR, "203.0.113.195, 70.41.3.18, 150.172.238.178"); HttpServletRequest actual = filterAndGetWrappedRequest(); - assertThat(actual.getRemoteAddr()).isEqualTo(actual.getRemoteHost()).isEqualTo("[203.0.113.195]"); + assertThat(actual.getRemoteAddr()).isEqualTo(actual.getRemoteHost()).isEqualTo("203.0.113.195"); assertThat(actual.getRemotePort()).isEqualTo(MockHttpServletRequest.DEFAULT_SERVER_PORT); } diff --git a/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java b/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java index bf78be2b93..f966c099b6 100644 --- a/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java +++ b/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java @@ -230,7 +230,7 @@ class ForwardedHeaderTransformerTests { request = this.requestMutator.apply(request); assertThat(request.getRemoteAddress()).isNotNull(); - assertThat(request.getRemoteAddress().getHostName()).isEqualTo("[203.0.113.195]"); + assertThat(request.getRemoteAddress().getHostName()).isEqualTo("203.0.113.195"); }