HandlerInterceptor with a callback method invoked after the
start of asynchronous request handling.
When a handler starts an asynchronous request, the DispatcherServlet
exits without invoking postHandle and afterCompletion as it
normally does for a synchronous request, since the result of request handling
(e.g. ModelAndView) is likely not yet ready and will be produced concurrently
from another thread. In such scenarios, afterConcurrentHandlingStarted
is invoked instead, allowing implementations to perform tasks such as cleaning
up thread-bound attributes before releasing the thread to the Servlet container.
When asynchronous handling completes, the request is dispatched to the
container for further processing. At this stage the DispatcherServlet
invokes preHandle, postHandle, and afterCompletion.
To distinguish between the initial request and the subsequent dispatch
after asynchronous handling completes, interceptors can check whether the
jakarta.servlet.DispatcherType of jakarta.
is "REQUEST" or "ASYNC".
Note that HandlerInterceptor implementations may need to do work
when an async request times out or completes with a network error. For such
cases the Servlet container does not dispatch and therefore the
postHandle and afterCompletion methods will not be invoked.
Instead, interceptors can register to track an asynchronous request through
the registerCallbackInterceptor and registerDeferredResultInterceptor
methods on WebAsyncManager. This can be done proactively on every request from
preHandle regardless of whether async request processing will start.
org.springframework.web.context.request.async.WebAsyncManager , org.springframework.web.context.request.async.CallableProcessingInterceptor , org.springframework.web.context.request.async.DeferredResultProcessingInterceptor
| Modifier and Type | Method and Description |
|---|---|
| public default void | afterConcurrentHandlingStarted(HttpServletRequest
the current request request, HttpServletResponse the current response response, Object the handler (or handler)HandlerMethod) that started async
execution, for type and/or instance examinationCalled instead of |
| afterConcurrentHandlingStarted | back to summary |
|---|---|
| public default void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception Called instead of Implementations may use the provided request and response but should avoid modifying them in ways that would conflict with the concurrent execution of the handler. A typical use of this method would be to clean up thread-local variables.
| |