Skip to content

Commit 84db06e

Browse files
committed
ForwardedHeaderFilter requestURI preserve encoding
Previously ForwardedHeaderFilter would override the requestURI with a URL decoded value. This would cause problems when using a URL encoded requestURI since downstream Filters would not see the URL encoded value as they should. This commit resolves this issue by ensuring that the requestURI is properly encoded. Issues SPR-15422
1 parent d098a4b commit 84db06e

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
6969
}
7070

7171

72-
private final UrlPathHelper pathHelper = new UrlPathHelper();
72+
private final UrlPathHelper pathHelper;
73+
74+
public ForwardedHeaderFilter() {
75+
this.pathHelper = new UrlPathHelper();
76+
this.pathHelper.setUrlDecode(false);
77+
}
7378

7479

7580
@Override

spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,18 @@ public void requestUriWithTrailingSlash() throws Exception {
106106
assertEquals("", actual.getContextPath());
107107
assertEquals("/path/", actual.getRequestURI());
108108
}
109+
110+
@Test
111+
public void requestUriPreserveEncoding() throws Exception {
112+
this.request.setContextPath("/app");
113+
this.request.setRequestURI("/app/path%20with%20spaces/");
114+
HttpServletRequest actual = filterAndGetWrappedRequest();
115+
116+
assertEquals("/app", actual.getContextPath());
117+
assertEquals("/app/path%20with%20spaces/", actual.getRequestURI());
118+
assertEquals("http://localhost/app/path%20with%20spaces/", actual.getRequestURL().toString());
119+
}
120+
109121
@Test
110122
public void requestUriEqualsContextPath() throws Exception {
111123
this.request.addHeader(X_FORWARDED_PREFIX, "/");

0 commit comments

Comments
 (0)