拦截器(interceptor)是springmvc提供的一种机制,可以对请求进行拦截或直接放行,可以在进入控制器方法前后对请求做出相应的处理;
作用:
在处理器方法执行前后,进行拦截过滤
主要执行的拦截有:
-
在处理器方法执行前执行拦截: preHandle
-
在处理方法执行后执行拦截: postHandle
-
在视图解析器解析完毕后执行拦截: afterCompletion
拦截器(Interceptor)与过滤器(Filter)的区别: -
Filter属于Servlet技术,Interceptor属于SpringMVC技术
-
拦截内容不同,Filter针对所有访问进行增强,Interceptor仅对SpringMVC的访问进行增强
-
过滤器在Servlet执行前后进行过滤,拦截器在Servlet执行后,处理器执行前或者后进行执行
自定义拦截器的步骤:
1.编写类,实现HandlerInterceptor接口
2.重写抽象方法
3.在springmvc.xml中配置拦截器
// 在springmvc.xml文件中配置拦截器需要拦截的路径
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置一个拦截器 -->
<mvc:interceptor>
<!--设置拦截器的拦截路径,支持*通配-->
<!--/** 表示拦截所有映射-->
<!--/* 表示拦截所有/开头的映射-->
<!--/user/* 表示拦截所有/user/开头的映射-->
<!--/user/add* 表示拦截所有/user/开头,且具体映射名称以add开头的映射-->
<!--/user/*All 表示拦截所有/user/开头,且具体映射名称以All结尾的映射-->
<mvc:mapping path="/**"/>
<!-- 排除指定路径不需要拦截 -->
<mvc:exclude-mapping path="/demo"></mvc:exclude-mapping>
<mvc:exclude-mapping path="/hello"></mvc:exclude-mapping>
<!-- 使用指定的拦截器类处理 -->
<bean class="com.itheima.intercept.MyIntercept"></bean>
</mvc:interceptor>
</mvc:interceptors>
配置多个拦截器,只需在xml里新增mvc:interceptor来配置即可