过滤器和拦截器的区别

今天在写完公司的需求后梳理代码时发现使用了拦截器,下意识地发散性的思考了一下过滤器与拦截器的区别,简单总结整理一下。

  1. 归属规范
  • 过滤器是JavaWeb Servlet规范里面的 ,通过实现 javax.servlet.Filter 接口实现。
  • 拦截器是spring框架里面的。通过实现 HandlerInterceptor 接口或继承 HandlerInterceptorAdapter 类实现。拦截器依赖于Spring框架,必须在Spring容器中注册为Bean,才能生效。
  • 作用范围及触发时机
  • 过滤器处理所有请求,在请求进入 Servlet 容器之前触发执行。
  • 拦截器只在请求进入Controller前后进行拦截,默认不处理静态资源。
  1. 实现机制
  • 过滤器基于基于函数回调实现,通过FilterChain传递请求,链式调用。
  • 拦截器基于反射和动态代理实现,通过拦截器链(HandlerExecutionChain)执行。
  1. 适用场景
  • 过滤器适用的场景:全局字符编码设置、跨域请求处理、压缩响应内容等。
  • 拦截器适用的场景:日志记录、权限校验、接口监控、安全验证等。

拦截器和过滤器的区别在于它们的作用层面不同。

  • 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
  • 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

Filter、Servlet、Interceptor、Controller的执行顺序:

相关推荐
ybq1951334543123 分钟前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339461 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8501 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT2 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟3 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode4 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社24 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理5 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码5 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
YuTaoShao5 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展