diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java index 302e22a2f428..5bb4a53f7d08 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java @@ -36,6 +36,8 @@ import org.springframework.util.PathMatcher; import org.springframework.web.HttpRequestHandler; import org.springframework.web.context.request.WebRequestInterceptor; +import org.springframework.web.context.request.async.WebAsyncManager; +import org.springframework.web.context.request.async.WebAsyncUtils; import org.springframework.web.context.support.WebApplicationObjectSupport; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; @@ -569,6 +571,12 @@ public CorsInterceptor(@Nullable CorsConfiguration config) { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + // Consistent with CorsFilter, ignore ASYNC dispatches + WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); + if (asyncManager.hasConcurrentResult()) { + return true; + } + return corsProcessor.processRequest(this.config, request, response); }