Spring HandlerInterceptor:如何访问类注解?
我用下面的代码注册了我的拦截器
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( myInterceptor() );
}
...
}
这里是拦截器的定义
public class MyInterceptorimplements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// Check to see if the handling controller is annotated
for (Annotation annotation : Arrays.asList(handler.getClass().getDeclaredAnnotations())){
if (annotation instanceof MyAnnotation){
... do something
但是,handler.getClass()。getDeclaredAnnotations()不会返回截获的Controller的类级别注释。
我只能得到方法级别的注释,这不是我想要的。
使用xml配置(使用Spring 3),相同的拦截器可以正常工作:
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor"/>
</list>
</property>
</bean>
Spring 4中有没有类级信息的方法?
根据在Spring-mvc拦截器中,我怎样才能访问处理程序控制器方法? “HandlerInterceptors只会使用上述配置为您提供访问HandlerMethod的权限。 但是获得课堂级别信息的替代配置是什么?
您可以在拦截器使用处理程序方法中访问spring控制器类级别的注释。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre-handle");
HandlerMethod hm=(HandlerMethod)handler;
Method method=hm.getMethod(); if(method.getDeclaringClass().isAnnotationPresent(Controller.class)){
if(method.isAnnotationPresent(ApplicationAudit.class))
{
System.out.println(method.getAnnotation(ApplicationAudit.class).value());
request.setAttribute("STARTTIME",System.currentTimemillis());
}
}
return true;
}
查看这个例子获取更多信息http://www.myjavarecipes.com/spring-profilingaudit-using-mvc-interceptors/
链接地址: http://www.djcxy.com/p/84383.html上一篇: Spring HandlerInterceptor: how to access class annotations?