过滤器和拦截器的区别

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

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

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

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

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

相关推荐
ShareBeHappy_Qin39 分钟前
设计模式——设计模式理念
java·设计模式
程序猿大波3 小时前
基于Java,SpringBoot,Vue,HTML高校社团信息管理系统设计
java·vue.js·spring boot
小李同学_LHY3 小时前
微服务架构中的精妙设计:环境和工程搭建
java·spring·微服务·springcloud
慕容魏3 小时前
面经分享,中科创达(安卓开发,二面挂)
java·开发语言
不辉放弃4 小时前
Java/Scala是什么
java·scala
喵手4 小时前
Java实现视频格式转换的完整指南:从FFmpeg到纯Java方案!
java·开发语言·ffmpeg
天上掉下来个程小白4 小时前
Redis-04.Redis常用命令-字符串常用命令
java·数据库·redis·springboot·苍穹外卖
Zz_waiting.4 小时前
多线程 - 线程安全 2 -- > 死锁问题
java·开发语言
就改了5 小时前
Java进阶——Lombok的使用
java·服务器·前端
Agome995 小时前
linux面试题
java·开发语言·excel