刚开始时候,拦截器是这样配置了的:
<bean id="urlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.moneyP2P.base.spring.interceptor.CheckLoginInterceptor"/>
<bean class="com.moneyP2P.p2p.VSFP.app.spring.interceptor.TokenInterceptor">
<property name="notAllowList">
<list>
<value>/app/check/**</value>
</list>
</property>
</bean>
<bean class="com.moneyP2P.p2p.VSFP.app.spring.controller.mfa.interceptor.AppAdminTokenInterceptor">
<property name="notAllowList">
<list>
<value>/appAdmin/check/**</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
代码 :
@SuppressWarnings("static-access")
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 定义返回值变量
Class<?> clazz = handler.getClass();
// 这样就可以获取 注解,进行判断控制了
CheckLogin checkLogin = clazz.getAnnotation(CheckLogin.class);
。。。。。
这样子配置是没有问题的。
之后变动了配置了
<!-- 废弃旧版本,使用下面的新版本
<bean id="urlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
-->
<bean id="urlMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.moneyP2P.base.spring.interceptor.CheckLoginInterceptor"/>
<bean class="com.moneyP2P.p2p.VSFP.app.spring.interceptor.TokenInterceptor">
<property name="notAllowList">
<list>
<value>/app/check/**</value>
</list>
</property>
</bean>
<bean class="com.moneyP2P.p2p.VSFP.app.spring.controller.mfa.interceptor.AppAdminTokenInterceptor">
<property name="notAllowList">
<list>
<value>/appAdmin/check/**</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
使用了好久了, 我就发现了 这样子的配置,拦截器 根本没有起到作用的,
结果排除发现
CheckLogin checkLogin = clazz.getAnnotation(CheckLogin.class);
获取到的内容,为空的!!!
和同事一起 测试,发现有时候可以 起作用, 有时候又没有做作用!!!
百度参考 了一下
然后代码 改了一下就可以了
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Class<?> clazz= handlerMethod.getBeanType();
CheckLogin checkLogin = clazz.getAnnotation(CheckLogin.class);
// 使用 getBeanType 即可,如果使用 getBean可能不可以