springboot过滤器/拦截器/AOP区别与执行顺序
如果监听器、过滤器、 拦截器、 AOP都存在,则它们的执行顺序为:监听器 => 过滤器=> 拦截器=> AOP。
过滤器/拦截器/AOP
简介
- 过滤器:Filter。拦截器:Interceptor 。
- 在Spring构架的程序中,要优先使用拦截器。几乎所有 Filter 能够做的事情,interceptor 都能够轻松的实现。
- AOP:可以自定义切入的点,有方法的参数,但拿不到http请求,可以通过RequestContextHolder等方式获得。
调用顺序
过滤前=> 拦截前=> AOP=> Controller=> AOP=> 拦截后=> 过滤后
不同点
项 | 过滤器 | 拦截器 |
使用场景 | 对请求/响应进行修改、判断等。一般用于过滤参数、登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换。 | 在service或者一个方法前/后调用一个方法,或者在方法后调用一个方法。 |
能力 |
可以拿到原始的http请求与响应,拿不到请求的控制器和请求控制器中的方法的信息。 可以修改请求、响应、参数:比如:修改字符编码、删除低俗文字、删除危险字符、修改参数 |
可以拿到你请求的控制器和方法,却拿不到请求与响应。 |
顺序 | 可指定顺序。 | 可指定顺序。 |
实现方式 | 回调函数 | AOP |
使用范围 | 只能用于Web | 可用于Web、Application、Swing |
作用范围 | 所有请求。 | 只能是controller请求。静态资源无法控制。 |
使用位置 | controller前后、dispaterServlet前后 | controller前后 |
规范定义 |
Servlet 规范定义,Servlet 容器支持。 Filter 接口定义在 javax.servlet 包 |
Spring容器内,Spring框架支持。 HandlerInterceptor 接口 定义在org.springframework.web.servlet 包 |
灵活性/粒度 |
灵活性差(粒度大)。 不能够使用 Spring 容器资源 |
灵活性好(粒度小)。 能使用Spring里的任何资源、对象,例如 Service对象、数据源、事务管理等,通过IoC注入到拦截器即可。 |
打断链路 | 打断方法:处理请求和响应对象来引发中断,需要额外的动作,比如将用户重定向到错误页面。 | 打断方法:preHandle方法内返回 false |
执行次数 | 一个controller周期只调用一次:一个过滤器实例只能在容器初始化时调用一次。 | 一个controller周期可调用多次 |
参考文章:
https://blog.csdn.net/feiying0canglang/article/details/121387483
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架