剛開始時候,攔截器是這樣配置了的:java
<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); 。。。。。
這樣子配置是沒有問題的。web
以後變更了配置了spring
<!-- 廢棄舊版本,使用下面的新版本 <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>
使用了很久了, 我就發現了 這樣子的配置,攔截器 根本沒有起到做用的,mvc
結果排除發現 app
CheckLogin checkLogin = clazz.getAnnotation(CheckLogin.class);ide
獲取到的內容,爲空的!!!測試
和同事一塊兒 測試,發現有時候能夠 起做用, 有時候又沒有作做用!!!url
百度參考 了一下 .net
註解攔截器code
而後代碼 改了一下就能夠了
@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可能不能夠