在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
但它只能解决。我希望方法名称能够访问注释。
答案 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());
}
}
在所有其他情况下,处理程序对象将指向控制器。网上的大多数文档似乎都错过了这个微妙的观点。