Spring MVC配置拦截器有三种方式:
方式一:拦截所有的url,近似于总的拦截器(spring没有总的拦截器)
<mvc:interceptors>
<!-- 近似于总拦截器(因为spring没有总的拦截器),拦截所有的url -->
<bean class="com.spring.interceptor.TestInterceptor"/>
</mvc:interceptors>
<mvc:interceptor>会为每一个HandlerMapping注入一个拦截器。总有一个HandlerMapping会找到拦截器,也最多只能找到一个拦截器,所以总有一个拦截器会执行,起到了总拦截器的作用
方式二:拦截指定的url
<mvc:interceptors>
<!-- 拦截指定的url -->
<mvc:interceptor>
<mvc:mapping path="/valid/toPerson.form"/>
<bean class="com.spring.interceptor.TestInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
path="/valid/toPerson.form"也可以配置为path="/valid/*",拦截所有匹配的url
方案三:HandlerMapping上的拦截器:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.spring.interceptor.TestInterceptor"/>
</list>
</property>
</bean>
如果使用了<mvc:annotation-driven />, 它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦截器。
当然我们可以通过人工配置上面的两个Bean,不使用 <mvc:annotation-driven />,就可以 给interceptors属性 注入拦截器了。