diff --git a/spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java b/spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java index 36a771e71e..3e275bb360 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.server.PathContainer; import org.springframework.http.server.RequestPath; import org.springframework.lang.Nullable; import org.springframework.util.LinkedMultiValueMap; @@ -94,7 +95,7 @@ public final class UrlHandlerFilter extends OncePerRequestFilter { path = ServletRequestPathUtils.parseAndCache(request); } for (Map.Entry> entry : this.handlers.entrySet()) { - if (!entry.getKey().canHandle(request)) { + if (!entry.getKey().canHandle(request, path)) { continue; } for (PathPattern pattern : entry.getValue()) { @@ -247,7 +248,7 @@ public final class UrlHandlerFilter extends OncePerRequestFilter { /** * Whether the handler handles the given request. */ - boolean canHandle(HttpServletRequest request); + boolean canHandle(HttpServletRequest request, RequestPath path); /** * Handle the request, possibly delegating to the rest of the filter chain. @@ -276,8 +277,9 @@ public final class UrlHandlerFilter extends OncePerRequestFilter { } @Override - public boolean canHandle(HttpServletRequest request) { - return request.getRequestURI().endsWith("/"); + public boolean canHandle(HttpServletRequest request, RequestPath path) { + List elements = path.elements(); + return (!elements.isEmpty() && elements.get(elements.size() - 1).value().equals("/")); } @Override