Skip to content

Commit 194b4ce

Browse files
committed
Use parsed path for checks in UrlHandlerFilter
See gh-32830
1 parent 4054dc7 commit 194b4ce

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
import org.springframework.http.HttpHeaders;
3434
import org.springframework.http.HttpStatus;
35+
import org.springframework.http.server.PathContainer;
3536
import org.springframework.http.server.RequestPath;
3637
import org.springframework.lang.Nullable;
3738
import org.springframework.util.LinkedMultiValueMap;
@@ -94,7 +95,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
9495
path = ServletRequestPathUtils.parseAndCache(request);
9596
}
9697
for (Map.Entry<Handler, List<PathPattern>> entry : this.handlers.entrySet()) {
97-
if (!entry.getKey().canHandle(request)) {
98+
if (!entry.getKey().canHandle(request, path)) {
9899
continue;
99100
}
100101
for (PathPattern pattern : entry.getValue()) {
@@ -247,7 +248,7 @@ private interface Handler {
247248
/**
248249
* Whether the handler handles the given request.
249250
*/
250-
boolean canHandle(HttpServletRequest request);
251+
boolean canHandle(HttpServletRequest request, RequestPath path);
251252

252253
/**
253254
* Handle the request, possibly delegating to the rest of the filter chain.
@@ -276,8 +277,9 @@ protected AbstractTrailingSlashHandler(@Nullable Consumer<HttpServletRequest> in
276277
}
277278

278279
@Override
279-
public boolean canHandle(HttpServletRequest request) {
280-
return request.getRequestURI().endsWith("/");
280+
public boolean canHandle(HttpServletRequest request, RequestPath path) {
281+
List<PathContainer.Element> elements = path.elements();
282+
return (!elements.isEmpty() && elements.get(elements.size() - 1).value().equals("/"));
281283
}
282284

283285
@Override

0 commit comments

Comments
 (0)