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