diff --git a/org.springframework.web/src/main/java/org/springframework/web/util/UrlPathHelper.java b/org.springframework.web/src/main/java/org/springframework/web/util/UrlPathHelper.java index a8cabafae9..707c8aff22 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/util/UrlPathHelper.java +++ b/org.springframework.web/src/main/java/org/springframework/web/util/UrlPathHelper.java @@ -287,14 +287,15 @@ public class UrlPathHelper { * @return the query string */ public String getOriginatingQueryString(HttpServletRequest request) { - String queryString = (String) request.getAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE); - if (queryString == null) { - queryString = request.getQueryString(); + if ((request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE) != null) || + (request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE) != null)) { + return (String) request.getAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE); + } + else { + return request.getQueryString(); } - return queryString; } - /** * Decode the supplied URI string and strips any extraneous portion after a ';'. */ diff --git a/org.springframework.web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java b/org.springframework.web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java index a08168fd2f..f35af797b3 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java +++ b/org.springframework.web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java @@ -289,4 +289,26 @@ public class UrlPathHelperTests { request.setAttribute(WEBSPHERE_URI_ATTRIBUTE, "/test/foo/foo/"); tomcatCasualServletFolder(); } + + @Test + public void getOriginatingQueryString() { + request.setQueryString("forward=on"); + request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/path"); + request.setAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, "original=on"); + assertEquals("original=on", this.helper.getOriginatingQueryString(request)); + } + + @Test + public void getOriginatingQueryStringNotPresent() { + request.setQueryString("forward=true"); + assertEquals("forward=true", this.helper.getOriginatingQueryString(request)); + } + + @Test + public void getOriginatingQueryStringIsNull() { + request.setQueryString("forward=true"); + request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/path"); + assertNull(this.helper.getOriginatingQueryString(request)); + } + } \ No newline at end of file