目的:对应用程序的请求或响应做一些预处理/后处理
角色:
- 过滤器接口:定义过滤器的方法
- 具体过滤器:实现过滤器接口,包含具体的处理逻辑
- 过滤器管理器:负责维护过滤器链和调用过滤器
- 目标对象:请求处理的目的地,业务逻辑的实现,相当于被代理的方法或组件。
- 客户端:发出请求的web浏览器或API客户端

场景:当要插入与业务无关的逻辑时,比如日志、鉴权等。
优点:
- 职责分离:业务逻辑与通用操作分离
- 可拓展性:可以灵活的添加、修改和删除过滤器
- 复用性:过滤器可以在不同的请求中重用
缺点:影响性能,过滤链过长或过滤器执行的操作复杂,会影响性能。
过滤器和拦截器的区别
| 概念 | 技术层次 | 作用范围 | 执行顺序 | 依赖注入支持 |
|---|---|---|---|---|
| 过滤器 | Servlet 容器级别 | 拦截所有请求,包括静态资源 | 在请求进入 Servlet 容器时最先执行 | 默认不支持 |
| 拦截器 | Spring MVC 框架级别,依赖 Spring 容器 | 仅拦截控制器请求,不拦截静态资源 | 在 DispatcherServlet 之后,Controller 方法执行前后执行 | 支持 |


- 定位:过滤器是 Servlet 容器级别的 “大门卫”,拦截器是 Spring MVC 框架级别的 “业务保安”
- 范围:过滤器覆盖所有请求,拦截器只处理控制器请求
- 依赖:过滤器不依赖 Spring,拦截器依赖 Spring
- 选择原则:与容器相关用过滤器,与业务相关用拦截器
相关参考
https://www.runoob.com/design-pattern/intercepting-filter-pattern.html
824

被折叠的 条评论
为什么被折叠?



