在Spring MVC 中配置了攔截器不起作用
spring mvc一部分配置文件
1 <!-- 啟動 mvc 注解驅動 --> 2 <mvc:annotation-driven/> 3 <!-- 靜態資源處理 --> 4 <mvc:default-servlet-handler/> 5 6 <!-- 后台訪問攔截器 --> 7 <mvc:interceptors> 8 <mvc:interceptor> 9 <mvc:mapping path="/**"/> 10 <mvc:exclude-mapping path="/system/login"/> 11 <mvc:exclude-mapping path="/system/get_cpacha"/> 12 <mvc:exclude-mapping path="/h-ui/**"/> 13 <mvc:exclude-mapping path="/easyui/**"/> 14 <bean class="cn.fereli.interceptor.LoginInterceptor"></bean> 15 </mvc:interceptor> 16 </mvc:interceptors> 17 18 <!-- 3.視圖的解析器--> 19 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 20 <property name="prefix" value="/WEB-INF/views/"></property> 21 <property name="suffix" value=".jsp"></property> 22 </bean>
網上有的說是因為在spring-mvc.xml文件中配置了
<mvc:annotation-driven/>導致攔截器不起作用,因為在這個標簽中默認有一個攔截器《
這句會其實它已經注冊了一個DefaultAnnotationHandlerMapping ,而在后面你自己注冊的優先級沒它內部的高,所以一直都不會調用你注冊的攔截器。
既然 <mvc:annotation-driven/>的攔截器優先級高,所以你在配置你的視圖解析器的時候就將將他優先級提高
1 <!-- 后台訪問攔截器 --> 2 <mvc:interceptors> 3 <!--在這里把攔截器的全類名聲明好,結果問題解決了--> 4 <bean class="cn.fereli.interceptor.LoginInterceptor"/> 5 <mvc:interceptor> 6 <mvc:mapping path="/**"/> 7 <mvc:exclude-mapping path="/system/login"/> 8 <mvc:exclude-mapping path="/system/get_cpacha"/> 9 <mvc:exclude-mapping path="/h-ui/**"/> 10 <mvc:exclude-mapping path="/easyui/**"/> 11 <bean class="cn.fereli.interceptor.LoginInterceptor"></bean> 12 </mvc:interceptor> 13 </mvc:interceptors>