diff --git a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java index 64de2672cf5..5d0b207b72d 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java +++ b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java @@ -421,6 +421,7 @@ public class UrlPathHelper { private String decodeAndCleanUriString(HttpServletRequest request, String uri) { uri = removeSemicolonContent(uri); uri = decodeRequestString(request, uri); + uri = getSanitizedPath(uri); return uri; } diff --git a/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java b/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java index a18b154a196..a61ff32731e 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java @@ -121,6 +121,13 @@ public class UrlPathHelperTests { request.setRequestURI("/foo;f=F;o=O;o=O/bar;b=B;a=A;r=R"); assertEquals("/foo/bar", helper.getRequestUri(request)); + + // SPR-13455 + + request.setServletPath("/foo/1"); + request.setRequestURI("/foo/;test/1"); + + assertEquals("/foo/1", helper.getRequestUri(request)); } @Test @@ -204,20 +211,20 @@ public class UrlPathHelperTests { assertEquals("/foo/", helper.getLookupPathForRequest(request)); } - //SPR-12372 + //SPR-12372 & SPR-13455 @Test - public void defaultServletEndingWithDoubleSlash() throws Exception { + public void removeDuplicateSlashesInPath() throws Exception { request.setContextPath("/SPR-12372"); request.setPathInfo(null); request.setServletPath("/foo/bar/"); request.setRequestURI("/SPR-12372/foo//bar/"); - assertEquals("/foo//bar/", helper.getLookupPathForRequest(request)); + assertEquals("/foo/bar/", helper.getLookupPathForRequest(request)); request.setServletPath("/foo/bar/"); request.setRequestURI("/SPR-12372/foo/bar//"); - assertEquals("/foo/bar//", helper.getLookupPathForRequest(request)); + assertEquals("/foo/bar/", helper.getLookupPathForRequest(request)); // "normal" case request.setServletPath("/foo/bar//");