SpringMVC提供的拦截器类似于Servlet api中的过滤器,可以对控制器的请求进行拦截实现相关的预处理和后处理。
过滤器:
是Servlet规范的一部分,所有的web项目都可以使用。
拦截器:
是SpringMVC框架的实现,只有在SpringMVC框架中才能使用,只能拦截请求,不能拦截页面。
自定义拦截来类
自定义的拦截类需要实现HandlerInterceptor接口。
主要是使用Handlerinterceptor的预处理和后处理接口。
预处理方法preHandle的返回值表示是否放行请求,返回true表示放行。
配置拦截器
创建拦截器规则,在SpringMVC的<beans>标签中配置。
<!--配置所有拦截器-->
<mvc:interceptors>
<!--配置拦截器,可配置多个-->
<mvc:interceptor>
<!--要拦截的路径-->
<mvc:mapping path="/book/query"/>
<mvc:mapping path="/book/book"/>
<!--拦截/student/下的所有请求-->
<mvc:mapping path="/student/**"/>
<!--放行/student/add下的请求-->
<mvc:exclude-mapping path="/student/add"/>
<!--拦截器的路径,MyInterceptor为实现HandlerInterceptor的类-->
<bean class="xin.students.utils.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
拦截器链
将多个拦截器按照一定的顺序后塍一个执行链。
给一个方法配置多个拦截器。
<mvc:interceptors>
<!--配置拦截器-1-->
<mvc:interceptor>
<mvc:mapping path="/book/query"/>
<bean class="xin.students.utils.MyInterceptor1"/>
</mvc:interceptor>
<!--配置拦截器-2-->
<mvc:interceptor>
<mvc:mapping path="/book/query"/>
<bean class="xin.students.utils.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
执行顺序:
拦截器一前处理
拦截器二前处理
执行被拦截的方法
拦截器一后处理
拦截器二后处理