使用Servlet API实现拦截器时,我开箱即用了HandlerMethod
:
... extends HandlerInterceptorAdapter
@Override
public boolean preHandle(final HttpServletRequest request,
final HttpServletResponse response, final Object handlerMethod) throws Exception {
在实施HandlerMethod
而不是WebFilter
时可以访问HandlerInterceptorAdapter
吗?
如果是WebFilter
,我有:
... implements WebFilter {
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
一旦我可以通过调用HandlerMethod
访问serverWebExchange.getAttribute("....bestMatchingHandler")
,但是它不再起作用。参见corresponding question。我的问题是:如何在不使用HandlerMethod
的情况下获得serverWebExchange.getAttribute
?
答案 0 :(得分:3)
我找到了答案,这也有助于回答我原来的问题。 HandlerMethod
可以这样获得:
(HandlerMethod) this.handlerMapping.getHandler(serverWebExchange).toProcessor().peek();
其中handlerMapping
是类型RequestMappingHandlerMapping
的bean,可以从WebFlux注入。