过滤器、拦截器、触发器 完整对比详解
目录一、过滤器 FilterServlet Filter1. 层级与本质2. 执行全流程请求完整链路3. 核心接口 生命周期4. 特点5. 典型使用场景6. 局限二、拦截器 InterceptorSpringMVC HandlerInterceptor1. 层级与本质2. 完整执行时序Filter → Interceptor 顺序3. 关键特点4. 典型场景5. 和 Filter 核心区分三、触发器 Trigger数据库触发器1. 层级与本质2. 触发时机分类3. MySQL 简单示例4. 典型使用场景5. 触发器优缺点优点缺点生产慎用复杂逻辑6. 注意区分四、三者完整执行链路汇总一次 HTTP 接口请求五、快速选型总结三者分属三个完全不同技术层适用场景、执行时机、使用技术栈完全割裂先分层定位过滤器 FilterServlet 规范Web 容器层Tomcat/Jetty作用于 HTTP 请求原始流拦截器 InterceptorSpringMVC 框架层Spring 容器作用于 Controller 处理器触发器 Trigger数据库层MySQL/Oracle数据库引擎表数据增删改自动执行 SQL一、过滤器 FilterServlet Filter1. 层级与本质属于 Java Web Servlet 标准接口由Tomcat 等 web 容器创建管理早于 Spring 容器初始化。 拦截原始 HTTP 请求所有访问资源静态 html、图片、接口、jsp都会先走过滤器。2. 执行全流程请求完整链路浏览器请求 → Tomcat 接收 →Filter 链多个按配置顺序执行→ 到达资源静态文件 / DispatcherServlet → Controller → 返回响应 →逆序再次经过 Filter→ 返回浏览器执行节点doFilter()放行前预处理请求编码、跨域、Token 校验、日志、限流chain.doFilter(request,response)放行进入下一个过滤器 / 资源放行后后置处理响应流修改返回报文、统一包装返回体3. 核心接口 生命周期public interface Filter { // 容器启动仅执行1次初始化 void init(FilterConfig filterConfig); // 每次请求执行核心逻辑 void doFilter(ServletRequest request, ServletResponse response, FilterChain chain); // 容器关闭销毁 void destroy(); }4. 特点依赖 Servlet API脱离 Web 容器无法使用只能拿到原生ServletRequest不能获取 Spring 上下文、Controller 方法参数优先级最高请求进来最先执行比拦截器早可以拦截静态资源图片、css、html多个 Filter 通过web.xml或WebFilter配置执行顺序。5. 典型使用场景统一设置编码request.setCharacterEncoding(UTF-8)全局跨域处理 CORS请求 Token / 登录校验无 token 直接返回 401不放行打印原始请求 URL、请求体日志文件上传请求预处理限流、黑名单 IP 拦截6. 局限无法获取 Controller、方法注解、入参不能使用Autowired直接注入 Spring Bean需特殊工具获取上下文。二、拦截器 InterceptorSpringMVC HandlerInterceptor1. 层级与本质SpringMVC 框架提供归Spring IoC 容器管理仅拦截进入DispatcherServlet后的Controller 接口请求静态资源不会进入拦截器。2. 完整执行时序Filter → Interceptor 顺序浏览器 → Filter → DispatcherServlet 分发器 →拦截器链→ Controller → 视图 / 返回 JSON 响应逆序Controller 执行完 → 拦截器后置方法 → Filter → 浏览器三个核心回调方法public interface HandlerInterceptor { // 1. Controller执行【之前】执行true放行false直接截断返回 boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler); // 2. Controller执行成功视图渲染【之前】执行ResponseBody接口几乎不用 void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView); // 3. 请求完全结束视图渲染完成/接口返回最后执行资源释放异常也会走这里 void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex); }3. 关键特点Spring 体系可直接Autowired注入 Service、Mapperhandler参数可强转为HandlerMethod拿到当前 Controller 类执行的方法、方法注解Login、Permission方法入参、返回值类型不拦截静态资源html/img/css执行时机晚于 Filter可精准控制只拦截指定接口路径排除部分接口适合业务层面鉴权、权限校验。4. 典型场景基于注解的接口权限校验判断用户是否有访问接口权限获取当前登录用户信息存入 ThreadLocal 全局使用接口请求耗时统计preHandle 记录开始时间afterCompletion 计算耗时操作日志记录记录谁调用了哪个接口、参数接口防重复提交校验5. 和 Filter 核心区分维度Filter 过滤器Interceptor 拦截器所属层Servlet 容器 (Tomcat)SpringMVC 框架依赖 APIServlet APISpring MVC拦截范围所有资源 (静态 接口)仅 Controller 接口获取业务信息无法获取 Controller 方法可拿到方法、注解、参数Spring Bean 注入不方便直接 Autowired执行顺序先执行Filter 放行后才执行三、触发器 Trigger数据库触发器1. 层级与本质数据库内置功能MySQL、Oracle、PostgreSQL和 Java 代码完全无关。 定义在数据表上当表发生INSERT / UPDATE / DELETE操作时数据库自动执行一段预定义 SQL。2. 触发时机分类按执行时间分两类BEFORE增 / 改 / 删之前触发修改即将插入 / 更新的数据校验字段合法性不满足直接抛异常阻止操作AFTER增 / 改 / 删之后触发同步数据到日志表、归档表、分表数据变更记录审计日志按触发行粒度每行数据变更都会触发一次。3. MySQL 简单示例用户表 user 新增数据后自动写入操作日志表 user_logsql-- 创建触发器 DELIMITER // CREATE TRIGGER tri_user_insert AFTER INSERT ON user FOR EACH ROW BEGIN INSERT INTO user_log (operate, uid, create_time) VALUES (新增用户, NEW.id, NOW()); END // DELIMITER ;关键字NEW新增 / 更新后的新数据行OLD更新 / 删除前的旧数据行4. 典型使用场景数据变更审计记录谁、何时修改了哪条数据数据同步主表修改自动同步到归档表、历史表字段自动填充创建时间、更新时间、版本号自动赋值简单数据约束限制字段取值、防止脏数据入库跨表联动订单创建自动扣减库存不推荐复杂业务5. 触发器优缺点优点数据库层强制生效不管 Java、Python 等任何客户端操作表都会触发简单数据同步不用在业务代码重复写逻辑。缺点生产慎用复杂逻辑隐藏业务逻辑开发排查问题很难追踪无法加日志、调试出问题定位困难大批量插入 / 更新会严重拖慢 SQL 性能触发器嵌套容易死循环A 表触发器更新 BB 又触发更新 A事务问题触发器内 SQL 和原操作同事务失败一起回滚。6. 注意区分触发器是数据库能力和前面 Web 层 Filter、Interceptor 没有任何关联只是名字都带 “拦截 / 触发” 容易混淆。四、三者完整执行链路汇总一次 HTTP 接口请求客户端发起 HTTP 请求Tomcat 执行Filter 过滤器全局编码、跨域、原始 token 校验请求进入 Spring DispatcherServlet执行 SpringMVCInterceptor 拦截器业务权限、注解鉴权、用户上下文执行 Controller 业务代码调用 Mapper 操作 MySQLMySQL 执行 INSERT/UPDATE/DELETE触发数据表Trigger 触发器自动同步日志、修改关联数据SQL 执行完毕返回结果给 Service → Controller逆序执行 Interceptor postHandle、afterCompletion逆序走 Filter 后置逻辑组装响应返回浏览器五、快速选型总结处理原始 HTTP 流、跨域、编码、静态资源拦截 →Filter 过滤器Spring 接口业务鉴权、读取 Controller 注解、操作日志、接口耗时 →Interceptor 拦截器数据库数据变更自动同步、审计、字段自动赋值 →数据库 Trigger 触发器

相关新闻

AMD量化模型部署常见问题:解决10个最常见的安装和运行错误

AMD量化模型部署常见问题:解决10个最常见的安装和运行错误

AMD量化模型部署常见问题:解决10个最常见的安装和运行错误 【免费下载链接】Llama-3.3-70B-Instruct-w4a16-asym-torchao-v0.17.0 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Llama-3.3-70B-Instruct-w4a16-asym-torchao-v0.17.0 部署AMD量化模型时&…

2026/7/13 16:31:05 阅读更多 →
Qwen2-7B_rai_1.7.1_npu_4K模型配置详解:从config.json到genai_config.json的完整解读

Qwen2-7B_rai_1.7.1_npu_4K模型配置详解:从config.json到genai_config.json的完整解读

Qwen2-7B_rai_1.7.1_npu_4K模型配置详解:从config.json到genai_config.json的完整解读 【免费下载链接】Qwen2-7B_rai_1.7.1_npu_4K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen2-7B_rai_1.7.1_npu_4K 想要快速掌握Qwen2-7B_rai_1.7.1_npu_4K模型…

2026/7/13 16:27:04 阅读更多 →
Token Fusion技术揭秘:DeepSeek-R1-Distill-Qwen-7B如何实现高效NPU推理

Token Fusion技术揭秘:DeepSeek-R1-Distill-Qwen-7B如何实现高效NPU推理

Token Fusion技术揭秘:DeepSeek-R1-Distill-Qwen-7B如何实现高效NPU推理 【免费下载链接】DeepSeek-R1-Distill-Qwen-7B_rai_1.7.1_npu_16K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/DeepSeek-R1-Distill-Qwen-7B_rai_1.7.1_npu_16K 在当今AI模型部…

2026/7/13 16:25:03 阅读更多 →

最新新闻

Cosmos-H-Surgical-Simulator 与 Cosmos-Predict2.5-2B 的对比分析:从基础模型到专业手术模拟

Cosmos-H-Surgical-Simulator 与 Cosmos-Predict2.5-2B 的对比分析:从基础模型到专业手术模拟

Cosmos-H-Surgical-Simulator 与 Cosmos-Predict2.5-2B 的对比分析:从基础模型到专业手术模拟 【免费下载链接】Cosmos-H-Surgical-Simulator 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Cosmos-H-Surgical-Simulator Cosmos-H-Surgical-Simulato…

2026/7/13 19:09:49 阅读更多 →
储能消防难搞?聊聊 100MWh 项目中消防系统与 EMS 联动的闭环设计

储能消防难搞?聊聊 100MWh 项目中消防系统与 EMS 联动的闭环设计

那个凌晨三点的告警,差点让 100MWh 电站「火」了 去年 8 月,在西北某 50MW/100MWh 储能电站的并网调试现场,我们遇到了一个至今想起来都后怕的细节。当时正值夏季高温,某个电池舱的温感传感器突发高位预警,但由于消防…

2026/7/13 19:09:49 阅读更多 →
终极指南:掌握encoding.js的多编码处理技巧

终极指南:掌握encoding.js的多编码处理技巧

终极指南:掌握encoding.js的多编码处理技巧 【免费下载链接】encoding.js Convert and detect character encoding in JavaScript 项目地址: https://gitcode.com/gh_mirrors/en/encoding.js 在现代Web开发中,字符编码处理是每个开发者都会遇到的…

2026/7/13 19:07:48 阅读更多 →
初学者指南:在Mac上运行mlx-community/Qwen3.5-2B-OptiQ-4bit的详细步骤

初学者指南:在Mac上运行mlx-community/Qwen3.5-2B-OptiQ-4bit的详细步骤

初学者指南:在Mac上运行mlx-community/Qwen3.5-2B-OptiQ-4bit的详细步骤 【免费下载链接】Qwen3.5-2B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwen3.5-2B-OptiQ-4bit Qwen3.5-2B-OptiQ-4bit是由mlx-optiq工具包构建的4位混…

2026/7/13 19:05:48 阅读更多 →
Rapyd-Laravel实战案例:如何快速构建完整博客管理系统教程

Rapyd-Laravel实战案例:如何快速构建完整博客管理系统教程

Rapyd-Laravel实战案例:如何快速构建完整博客管理系统教程 【免费下载链接】rapyd-laravel deprecated rewritten in rapyd-livewire 项目地址: https://gitcode.com/gh_mirrors/ra/rapyd-laravel 想要快速构建一个功能完整的博客管理系统吗?Rapy…

2026/7/13 19:05:48 阅读更多 →
Laguna-M.1-mxfp4与原始模型对比:量化后的性能与精度分析

Laguna-M.1-mxfp4与原始模型对比:量化后的性能与精度分析

Laguna-M.1-mxfp4与原始模型对比:量化后的性能与精度分析 【免费下载链接】Laguna-M.1-mxfp4 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Laguna-M.1-mxfp4 Laguna-M.1-mxfp4是基于原始poolside/Laguna-M.1模型通过mxfp4量化技术转换的MLX…

2026/7/13 19:03:46 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/13 4:38:40 阅读更多 →

月新闻