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 a2653b5de12..a087ebd0139 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 @@ -118,7 +118,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { private final String requestUri; - private final StringBuffer requestUrl; + private final String requestUrl; private final Map> headers; @@ -137,8 +137,8 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { String prefix = getForwardedPrefix(request); this.contextPath = (prefix != null ? prefix : request.getContextPath()); this.requestUri = this.contextPath + pathHelper.getPathWithinApplication(request); - this.requestUrl = new StringBuffer(this.scheme + "://" + this.host + - (port == -1 ? "" : ":" + port) + this.requestUri); + this.requestUrl = this.scheme + "://" + this.host + + (port == -1 ? "" : ":" + port) + this.requestUri; this.headers = initHeaders(request); } @@ -206,7 +206,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter { @Override public StringBuffer getRequestURL() { - return this.requestUrl; + return new StringBuffer(this.requestUrl); } // Override header accessors to not expose forwarded headers 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 b27a492bc53..3e461241491 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 @@ -204,6 +204,16 @@ public class ForwardedHeaderFilterTests { HttpServletRequest actual = filterAndGetWrappedRequest(); assertEquals("http://localhost/prefix/mvc-showcase", actual.getRequestURL().toString()); } + + @Test + public void requestURLNewStringBuffer() throws Exception { + this.request.addHeader(X_FORWARDED_PREFIX, "/prefix/"); + this.request.setRequestURI("/mvc-showcase"); + + HttpServletRequest actual = filterAndGetWrappedRequest(); + actual.getRequestURL().append("?key=value"); + assertEquals("http://localhost/prefix/mvc-showcase", actual.getRequestURL().toString()); + } @Test public void contextPathWithForwardedPrefix() throws Exception {