From db52c77cca58689f9305611486454f6ab56079ca Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Mon, 11 Dec 2023 10:24:39 +0000 Subject: [PATCH] Minor updates in HandlerMappingIntrospector Required by Spring Security to complete work on https://github.com/spring-projects/spring-security/issues/14128 The setCache and resetCache methods used from createCacheFilter are now public. Generally they don't need to be used outside of the Filter if only making checks against the current request. Spring Security, however, makes additional checks against requests with alternative paths. --- .../handler/HandlerMappingIntrospector.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java index 31f76869bc..30a2d6755b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerMappingIntrospector.java @@ -191,8 +191,12 @@ public class HandlerMappingIntrospector public Filter createCacheFilter() { return (request, response, chain) -> { CachedResult previous = setCache((HttpServletRequest) request); - chain.doFilter(request, response); - resetCache(request, previous); + try { + chain.doFilter(request, response); + } + finally { + resetCache(request, previous); + } }; } @@ -206,7 +210,7 @@ public class HandlerMappingIntrospector * @since 6.0.14 */ @Nullable - private CachedResult setCache(HttpServletRequest request) { + public CachedResult setCache(HttpServletRequest request) { CachedResult previous = (CachedResult) request.getAttribute(CACHED_RESULT_ATTRIBUTE); if (previous == null || !previous.matches(request)) { HttpServletRequest wrapped = new AttributesPreservingRequest(request); @@ -245,7 +249,7 @@ public class HandlerMappingIntrospector * a filter after delegating to the rest of the chain. * @since 6.0.14 */ - private void resetCache(ServletRequest request, @Nullable CachedResult cachedResult) { + public void resetCache(ServletRequest request, @Nullable CachedResult cachedResult) { request.setAttribute(CACHED_RESULT_ATTRIBUTE, cachedResult); } @@ -363,7 +367,7 @@ public class HandlerMappingIntrospector * @since 6.0.14 */ @SuppressWarnings("serial") - private static final class CachedResult { + public static final class CachedResult { private final DispatcherType dispatcherType;