【问题标题】:In a Spring-mvc interceptor, how can I access to the handler controller method?在 Spring-mvc 拦截器中,如何访问处理程序控制器方法?
【发布时间】:2013-07-10 16:06:59
【问题描述】:

在 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

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

【问题讨论】:

    标签: java spring-mvc interceptor


    【解决方案1】:

    您可以将Object handler 转换为HandlerMethod。

    HandlerMethod method = (HandlerMethod) handler;
    

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

    【讨论】:

    • @Reimeus 绝对是,除非你知道你只有处理程序方法。例如,如果应用只有@Controller 来处理请求,那么您就保证只有HandlerMethod 实例。
    【解决方案2】:

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

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

    【讨论】:

    • 但是为什么会这样呢?您能否提供一些信息,为什么在使用 <mvc:interceptors><bean .. > 在 spring.xml 中声明它时它不起作用
    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2014-08-27
    相关资源
    最近更新 更多