过滤器和拦截器的区别

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

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

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

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

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

相关推荐
好好沉淀40 分钟前
@NotBlank(message = “{xxx}“) 注解中花括号的含义
java
fīɡЙtīиɡ ℡1 小时前
内存泄漏产生的原因
java·spring·servlet
码智社2 小时前
Java实现RSA密钥生成、加密解密、加签验签
java
wear工程师2 小时前
ThreadLocal 在线程池里为什么会串数据:别只会答内存泄漏
java·后端
Iruoyaoxh2 小时前
栈和队列~
java·开发语言
审小匠OpenCPAi2 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
码上上班3 小时前
docker课程
java·docker·容器
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
达子6663 小时前
第9章_HarmonyOs图解 用Java开发UI
java·ui·harmonyos
龙虾PRO5 小时前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展