目录
示意图
由上图可以看出,Filter和Interceptor的执行顺序:
过滤前 -> 拦截前 -> action执行 -> 拦截后 -> 过滤后
调用过程
- Filter.init();
- Filter.doFilter();
- HandlerInterceptor.preHandle();
- controller⽅法执⾏
- HandlerInterceptor.postHandle();
- DispatcherServlet视图渲染
- HandlerInterceptor.afterCompletion();
- Filter.doFilter();
- Filter.destroy();
引用网络图片,供大家参考:
区别
- 拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。
Filter依赖于Servlet,而Interceptor依赖于Spring框架。
- Filter的优先级高于
Interceptor
,即请求是先到Filter
再到Interceptor
。 - Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
- Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
- 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
- Filter可以修改request,而Interceptor不能。
- 过滤器只能在请求的前后使用,而拦截器可以详细到每个方法。
本文含有隐藏内容,请 开通VIP 后查看