浅谈:过滤器(Filter)与拦截器(Interceptor)之间的区别

发布于:2022-12-12 ⋅ 阅读:(1024) ⋅ 点赞:(0)

目录

示意图

调用过程

区别


示意图

​​​​​​​

 

由上图可以看出,Filter和Interceptor的执行顺序:

过滤前 -> 拦截前 -> action执行 -> 拦截后 -> 过滤后 

调用过程

  1. Filter.init();
  2. Filter.doFilter();
  3. HandlerInterceptor.preHandle();
  4. controller⽅法执⾏
  5. HandlerInterceptor.postHandle();
  6. DispatcherServlet视图渲染
  7. HandlerInterceptor.afterCompletion();
  8. Filter.doFilter();
  9. Filter.destroy();

        引用网络图片,供大家参考:

        

区别

  1. 拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。
  2. Filter依赖于Servlet,而Interceptor依赖于Spring框架。

  3. Filter的优先级高于Interceptor,即请求是先到Filter再到Interceptor
  4. Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
  5. Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
  6. 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
  7. Filter可以修改request,而Interceptor不能。
  8. 过滤器只能在请求的前后使用,而拦截器可以详细到每个方法。

本文含有隐藏内容,请 开通VIP 后查看