springmvc 攔截器 使用註解 進行判斷控制 無效的BUG

剛開始時候,攔截器是這樣配置了的: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可能不能夠
相關文章
相關標籤/搜索