拦截器(Interceptor) VS 过滤器(Filter)

对Filter、Interceptor的使用场景有点模糊,在遇到一个场景时,不确定是该使用Filter,还是使用Interceptor会更好一点。有时间了,归纳总结了一下,就有了现在这篇文章。

在网上找到了一张图,直观、明了地向我们展示了在处理、响应请求的过程中Filter与Interceptor的执行位置。

image.png

Filter与Interceptor的区别

  1. 与Filter相比,Interceptor能够深入到方法前后、异常抛出前后等,即Interceptor的使用具有更大的弹性,允许用户介入请求的生命周期,在请求过程中获取信息。Interceptor与请求更加耦合。
  2. Filter是在Servlet规范中定义的,是Servlet容器支持的。而Interceptor是在Spring容器内的,是Spring容器支持的。
  3. Filter不能使用Spring容器资源。而Interceptor是一个Spring组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等。
  4. Filter总是优先于Interceptor执行

应用场景

Filter应用场景:

  • 执行安全检查
  • 格式化请求头、请求主体
  • 记录请求日志
  • 根据请求内容授权或限制用户访问
  • 根据请求频率限制用户访问
  • 压缩响应内容
  • 创建、追加或修改响应内容
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容