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 77743aa9a8..4f59b8091c 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 4bb5814b15..6fe0ee2d55 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 @@ -169,6 +169,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() {