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?

下一篇: Notification disappear after activity finish