当前位置: 首页 > news >正文

SpringBoot 过滤器和拦截器的区别

SpringBoot 过滤器和拦截器的区别

SpringBoot 中的过滤器(Filter)和拦截器(Interceptor)都可以在请求处理的不同阶段执行特定的操作,但它们之间存在一些关键的区别:

1. 执行层级

  • 过滤器(Filter):工作在 Servlet 层,是基于 Servlet 规范的一部分。它们可以对几乎所有的请求起作用,即使是那些不经过 Spring Dispatcher Servlet 的请求。
  • 拦截器(Interceptor):工作在 Spring MVC 层,是 Spring 框架的一部分。它们只能对经过 Spring Dispatcher Servlet 的请求起作用,即只能处理控制器(Controller)的请求。

2. 功能范围

  • 过滤器(Filter):通常用于处理通用的请求和响应转换,如日志记录、安全认证、请求和响应的修改等。
  • 拦截器(Interceptor):通常用于处理特定的业务逻辑,如性能监控、事务管理、权限检查等。

3. 配置方式

  • 过滤器(Filter):可以通过在配置类中注册 FilterRegistrationBean 或使用 @WebFilter 注解来配置。
  • 拦截器(Interceptor):需要在一个配置类中实现 WebMvcConfigurer 接口,并重写 addInterceptors 方法来添加自定义拦截器。

4. 参数访问

  • 过滤器(Filter):可以访问到原始的请求和响应对象(HttpServletRequestHttpServletResponse),但无法直接访问 Spring MVC 的控制器方法和参数。
  • 拦截器(Interceptor):可以访问控制器方法的元数据,如方法签名、参数等,通过 preHandle 方法的 Object handler 参数。

5. 执行顺序

  • 过滤器(Filter):按照它们在过滤器链中的顺序执行。
  • 拦截器(Interceptor):分为三个阶段执行:preHandle(请求处理之前)、postHandle(请求处理之后、视图渲染之前)、afterCompletion(请求处理完成后)。

结论

虽然过滤器和拦截器在某些方面有重叠的功能,但它们在执行层级、功能范围和配置方式上有明显的区别。选择使用哪个取决于您的具体需求和场景。在实际开发中,根据需要灵活使用过滤器和拦截器可以帮助您更好地控制请求处理流程和执行特定的操作。

相关文章:

  • 【C语言】文件操作篇-----程序文件和数据文件,文件的打开和关闭,二进制文件和文本文件,fopen,fclose【图文详解】
  • 修复Jenkins fossa扫描的时候报错的问题
  • PostgreSQL数据优化——死元组清理
  • 前端框架的发展史可以追溯到早期的静态网页时代
  • 寄存器(内存访问)
  • 最短路 算法解析+例题
  • 关于tcp协议
  • 阿里云数据湖存储加速套件JindoData
  • 深度解析:cache的基本概念原理扫盲
  • 3月最新形势分析以及您个人指导结论优化:正式战斗状态的马上拉响
  • 蓝桥杯2023年-阶乘的和(数学推理,C++)
  • css动画和js动画的区别?
  • Web框架开发-web框架
  • 数据处理分类、数据仓库产生原因
  • 数据类型(面向对象)
  • CSS实用技巧
  • Java超时控制的实现
  • JS数组方法汇总
  • js中forEach回调同异步问题
  • spark本地环境的搭建到运行第一个spark程序
  • springMvc学习笔记(2)
  • vue-loader 源码解析系列之 selector
  • windows下使用nginx调试简介
  • 半理解系列--Promise的进化史
  • 对超线程几个不同角度的解释
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 每天10道Java面试题,跟我走,offer有!
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 《码出高效》学习笔记与书中错误记录
  • NLPIR智能语义技术让大数据挖掘更简单
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​520就是要宠粉,你的心头书我买单
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (BFS)hdoj2377-Bus Pass
  • (备忘)Java Map 遍历
  • (补)B+树一些思想
  • (层次遍历)104. 二叉树的最大深度
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *** 2003
  • .net framework profiles /.net framework 配置
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 常见的偏门问题
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 通过系统影子账户实现权限维持
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)