过滤器和拦截器的区别

过滤器(Filter)和拦截器(Interceptor)的区别

  1. 实现原理不同

    过滤器基于函数回调,一般自定义过滤器都会实现一个DoFilter()方法,这个方法包含一个FilterChain参数,此参数实际为一个回调接口。

    拦截器基于Java反射机制(动态代理)实现。

  2. 适用范围不同

    过滤器Filter实现基于javax.servlet.Filter接口,此接口在Servlet规范中定义,因此过滤器Filter的使用依赖于Tomcat等容器,导致它只能在Web程序中使用。

    拦截器Interceptor是Spring的一个组件,由Spring容器管理,可以单独使用。因此拦截器不仅能应用于web程序,也可以应用于Application、Swing等程序中。

  3. 使用场景不同

    过滤器Filter通常用来实现通用功能过滤,例如:敏感词过滤、响应数据压缩等功能。

    拦截器Interceptor更接近业务系统,主要用来实现项目中的业务判断,例如:日志记录、权限判断等业务。

  4. 触发时机不同

    Filter是在请求进入Tomcat等容器后,在进入Servlet之前进行预处理,当Servlet完成处理后请求结束

    Inteceptor 是在请求进入Servlet后,在进入controller之前进行预处理,controller中渲染对应的视图后请求结束

  5. 拦截的请求范围不同

    请求的执行顺序是:进入Tomcat等容器-> 进入Filter->进入Servlet-> 进入Inteceptor-> 进入控制器Controller

    Filter和Interceptor的执行时间点不同,先执行Filter后再执行Interceptor,再是Controller,即真正要调用的方法。


过滤器和拦截器的区别
http://oowatermelon.github.io/OoWaterMelonS/2022/12/03/过滤器和拦截器的区别/
作者
OoWaterMelonS Shao
发布于
2022年12月3日
许可协议