13

在 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;
   }
   ...
}

我已经找到 :

如何在spring-interceptor-prehandle-method中获取控制器方法名称

但它只能解决。我希望方法名称能够访问注释。

4

2 回答 2

22

您可以将 to 投射Object handlerHandlerMethod.

HandlerMethod method = (HandlerMethod) handler;

但是请注意,handler传递给的参数preHandle并不总是 a HandlerMethod(小心使用ClassCastException)。HandlerMethod然后具有可用于获取注释等的方法。

于 2013-07-10T16:10:24.960 回答
12

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());
    }

}

在所有其他情况下,处理程序对象将指向控制器。网络上的大多数文档似乎都忽略了这一点。

于 2013-09-05T19:14:13.163 回答