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;