diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java index f39e02ff22..8beb94bc0d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java @@ -181,7 +181,7 @@ public class ResourceUrlProvider implements ApplicationListener 0 ? index : lookupPath.length(); + private int getEndPathIndex(String lookupPath) { + int suffixIndex = lookupPath.length(); + int queryIndex = lookupPath.indexOf("?"); + if(queryIndex > 0) { + suffixIndex = queryIndex; + } + int hashIndex = lookupPath.indexOf("#"); + if(hashIndex > 0) { + suffixIndex = Math.min(suffixIndex, hashIndex); + } + return suffixIndex; } /** diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderTests.java index 85d4e669cf..c0bd8c54a7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceUrlProviderTests.java @@ -73,13 +73,18 @@ public class ResourceUrlProviderTests { } @Test // SPR-13374 - public void getStaticResourceUrlRequestWithRequestParams() { + public void getStaticResourceUrlRequestWithQueryOrHash() { MockHttpServletRequest request = new MockHttpServletRequest(); request.setContextPath("/"); request.setRequestURI("/"); - String url = this.urlProvider.getForRequestUrl(request, "/resources/foo.css?foo=bar&url=http://example.org"); - assertEquals("/resources/foo.css?foo=bar&url=http://example.org", url); + String url = "/resources/foo.css?foo=bar&url=http://example.org"; + String resolvedUrl = this.urlProvider.getForRequestUrl(request, url); + assertEquals("/resources/foo.css?foo=bar&url=http://example.org", resolvedUrl); + + url = "/resources/foo.css#hash"; + resolvedUrl = this.urlProvider.getForRequestUrl(request, url); + assertEquals("/resources/foo.css#hash", resolvedUrl); } @Test