过滤器和拦截器的区别

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

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

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

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

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

相关推荐
超级种码19 分钟前
Java:JavaAgent技术(java.instrument和java.attach)
java·开发语言·python
甜鲸鱼27 分钟前
【Spring AOP】操作日志的完整实现与原理剖析
java·spring boot·spring
狗头大军之江苏分军31 分钟前
年底科技大考:2025 中国前端工程师的 AI 辅助工具实战盘点
java·前端·后端
一 乐1 小时前
酒店客房预订|基于springboot + vue酒店客房预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
计算机毕设指导61 小时前
基于Spring Boot的防诈骗管理系统【源码文末联系】
java·spring boot·后端·spring·tomcat·maven·intellij-idea
a程序小傲1 小时前
饿了吗Java面试被问:Redis的持久化策略对比(RDBVS AOF)
java·redis·面试
我家领养了个白胖胖1 小时前
MCP模型上下文协议 Model Context Protocol & 百度地图MCP开发
java·后端·ai编程
Coder_Boy_1 小时前
基于DDD+Spring Boot 3.2+LangChain4j构建企业级智能客服系统
java·人工智能·spring boot·后端
黄俊懿1 小时前
【深入理解SpringCloud微服务】Spring-Security作用与原理解析
java·后端·安全·spring·spring cloud·微服务·架构师
塔能物联运维2 小时前
设备自适应采样率忽视能耗致续航降 后来结合功耗模型动态调优
java·后端·struts