From 95099fd709685f3d9a35e61273c9f23866db7105 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 10 Apr 2017 09:03:51 -0500 Subject: [PATCH] Fix ForwardedHeaderFilter preserves semicolon content Previously a requestURI that contained ';' would have the value incorrectly stripped out when using ForwardedHeaderFilter. This commit ensures that the ';' is preserved when using ForwardedHeaderFilter. Issue: SPR-15428 --- .../web/filter/ForwardedHeaderFilter.java | 1 + .../web/filter/ForwardedHeaderFilterTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+) 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() {