diff --git a/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java index b477d9988bf..9d388830dc9 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java @@ -74,6 +74,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { public ForwardedHeaderFilter() { this.pathHelper = new UrlPathHelper(); this.pathHelper.setUrlDecode(false); + this.pathHelper.setRemoveSemicolonContent(false); } 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 c0c385ea355..faafacbbeef 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 @@ -171,6 +171,17 @@ public class ForwardedHeaderFilterTests { assertEquals("/", actual.getRequestURI()); } + @Test + public void requestUriPreserveSemicolonContent() throws Exception { + this.request.setContextPath(""); + this.request.setRequestURI("/path;a=b/with/semicolon"); + HttpServletRequest actual = filterAndGetWrappedRequest(); + + assertEquals("", actual.getContextPath()); + assertEquals("/path;a=b/with/semicolon", actual.getRequestURI()); + assertEquals("http://localhost/path;a=b/with/semicolon", actual.getRequestURL().toString()); + } + @Test public void caseInsensitiveForwardedPrefix() throws Exception { this.request = new MockHttpServletRequest() {