过滤器和拦截器的区别

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

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

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

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

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

相关推荐
fouryears_2341713 分钟前
RabbitMQ 发送方确认的两大工具 (With Spring Boot)
java·spring boot·rabbitmq·java-rabbitmq
懂得节能嘛.34 分钟前
【LangChain4j 详解】Java生态大语言模型框架设计哲学与架构原理
java·人工智能·语言模型
许久'1 小时前
Java面试题
java
33255_40857_280591 小时前
使用EasyPOI实现Java订单数据导出(含多物料信息)——模板语法详解与实战
java·excel
一个人的幽默1 小时前
详细聊下easyexcel导出
java
蓝染yy1 小时前
Spring Boot
java·spring boot
天天摸鱼的java工程师2 小时前
如何设计一个高可用的微服务网关?你会如何考虑这道面试题?
java·后端·面试
双力臂4042 小时前
Java注解与反射:从自定义注解到框架设计原理
java·开发语言
柊二三2 小时前
关于项目的一些完善功能
java·数据库·后端·spring
潇凝子潇2 小时前
面条式代码(Spaghetti Code)
java·开发语言·log4j