在Spring-mvc拦截器中,如何访问处理程序控制器方法?

Tro*_*dor 12 java spring-mvc interceptor

在Spring-mvc拦截器中,我想访问处理程序控制器方法

public class CustomInterceptor implements HandlerInterceptor  {
    public boolean preHandle(
        HttpServletRequest request,HttpServletResponse response, 
            Object handler) {

        log.info(handler.getClass().getName()); //access to the controller class
        //I want to have the controller method
        ...
        return true;
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

我已经找到 :

如何对获得控制器,方法名,在弹簧拦截-prehandle法

但它只能解决.我希望方法名称可以访问注释.

Sot*_*lis 20

你可以施放Object handlerHandlerMethod.

HandlerMethod method = (HandlerMethod) handler;
Run Code Online (Sandbox Code Playgroud)

但请注意,handler传递给的参数preHandle并不总是HandlerMethod(小心ClassCastException).HandlerMethod然后有你可以用来获取注释的方法等.


dr.*_*use 11

HandlerInterceptors只会为您提供对HandlerMethod的访问权限,如果您已经注册了拦截器,如下所示:

@EnableWebMvc
@Configuration
public class InterceptorRegistry extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
        registry.addInterceptor(new InternalAccessInterceptor());
        registry.addInterceptor(new AuthorizationInterceptor());
    }

}
Run Code Online (Sandbox Code Playgroud)

在所有其他情况下,处理程序对象将指向控制器.网上的大多数文档似乎都错过了这个微妙的观点.