与过滤器功能是一样都是拦截请求
拦截器与过滤器的区别:
-
过滤器是Javaweb的技术, 只要是javaWeb项目就可以使用, 拦截器是SpringMVC框架的, 项目中添加SpringMVC依赖,才可以使用
-
过滤器配置/*, 拦截所有资源请求, 拦截器, /** 拦截的经过前端控制器的请求
-
执行时间, 过滤器先执行, 拦截器是否执行
拦截器的实现
-
编写一个类实现拦截器接口 HandlerInterceptor
-
在springmvc配置文件中进行配置
<!--配置拦截器--> <mvc:interceptors> <mvc:interceptor> <!--拦截的url: /* 拦截当前url /a /b(可以拦截) /a/b(拦截不了) /**: 拦截当前url 以及后代url --> <mvc:mapping path="/book/**"/> <!--排除那些url --> <mvc:exclude-mapping path="/book/index"/> <bean class="com.fs.book.interceptor.AInterceptor"/> </mvc:interceptor> </mvc:interceptors>
拦截器执行流程:
-
preHandle()执行顺序与mvc:interceptor顺序一致, postHandle() afterCompletion() 与mvc:interceptor顺序相反
-
所有的拦截器的preHandle() 返回true才执行 处理器方法,以及拦截器的postHandle()方法
-
只要某个拦截器的preHandle()方法返回true, 这个拦截器的afterCompletion()一定执行