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

时间:2013-07-10 16:07:00

标签: 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;
   }
   ...
}

我找到了:

how-to-get-controller-method-name-in-spring-interceptor-prehandle-method

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

2 个答案:

答案 0 :(得分:20)

您可以将Object handler转换为HandlerMethod

HandlerMethod method = (HandlerMethod) handler;

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

答案 1 :(得分: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());
    }

}

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