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

2022-09-04 06:15: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;
   }
   ...
}

我发现:

如何获取控制器方法名称弹簧拦截器预处理方法

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


答案 1

您可以将 转换为 。Object handlerHandlerMethod

HandlerMethod method = (HandlerMethod) handler;

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


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

}

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


推荐