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

SpringMVC的拦截器和过滤器有什么区别?执行顺序?

大家好,我是锋哥。今天分享关于【SpringMVC的拦截器和过滤器有什么区别?执行顺序?】面试题。希望对大家有帮助;

SpringMVC的拦截器和过滤器有什么区别?执行顺序?

超硬核AI学习资料,现在永久免费了!

在 SpringMVC 中,拦截器(Interceptor)过滤器(Filter)都能对请求进行预处理与后处理,但它们属于不同层级的机制。下面从定义、作用范围、使用场景和执行顺序等方面详细说明它们的区别。


一、概念与所属层级

对比项过滤器(Filter)拦截器(Interceptor)
所属规范Servlet 规范Spring MVC 框架
拦截对象所有进入容器的请求(包括静态资源、JSP、Servlet 等)仅拦截被 SpringMVC DispatcherServlet 分发的控制器请求
定义位置web.xml或通过@WebFilter注解注册通过实现HandlerInterceptor接口,在 Spring 配置中注册
依赖框架与 Spring 无关依赖 Spring 容器

二、典型使用场景

Filter

###Interceptor

三、执行流程与生命周期

SpringMVC 的请求完整执行链大致如下:

HTTP请求 → 过滤器(Filter) → DispatcherServlet → 拦截器(Interceptor) → Controller → 拦截器(Interceptor) → 视图解析(ViewResolver) → DispatcherServlet → 过滤器(Filter) →HTTP 响应返回

拦截器的三个方法

实现HandlerInterceptor接口后通常包含:

  1. preHandle():在 Controller 方法执行前调用,可中断请求;
  2. postHandle():Controller 执行后、视图渲染前调用;
  3. afterCompletion():视图渲染后调用,用于资源清理。

四、执行顺序(多层组合时)

  1. 多个 Filter:按注册顺序执行;先注册的先执行、最后返回。
  2. 多个 Interceptor:按配置顺序执行;preHandle顺序执行,postHandleafterCompletion逆序执行。
  3. 总体顺序总结
阶段执行顺序
请求进入Filter → Interceptor.preHandle → Controller

五、简要总结| 维度 | Filter | Interceptor |

|------|---------|-------------| | 所属层 | Servlet 容器级别| SpringMVC 应用级别 | | 拦截范围 | 所有请求 | Controller 请求 | | 可访问 Spring Bean |否(若未托管给 Spring) | 是 | | 典型用途 |编码、鉴权、跨域 | 日志、权限、参数注入 | | 执行顺序 | 先于 Interceptor 执行 | 在 Filter 之后执行 |


一句话总结:

Filter 是 Servlet 层的“门卫”,拦在整个 Web 应用最外层;
Interceptor 是 SpringMVC 的“管家”,专门拦截控制器层的业务请求。

是否希望我补充一个完整的执行顺序图示 + 示例代码(含两个 Filter 和两个 Interceptor 的执行日志顺序)?这样能更直观看到调用链。

http://www.cnnetsun.cn/news/53233.html

相关文章:

  • Spring IoC的实现机制是什么?
  • 耐用折叠屏手机推荐:三星Galaxy Z TriFold如何破解“折痕与耐用”难题?
  • 前端技术风险防控:以防为主,防控结合
  • 给女神发“在吗”,她回了个表情包是几个意思?—— 硬核探讨TCP 三次握手
  • 入门大模型必知的100个基础问题(附简明答案)
  • vue基于Spring Boot的建筑材料管理系统的应用和研究_ug8y52z3
  • 【大模型】-LangChain--RAG文档系统
  • 探索非线性电液伺服系统的模型自适应反步控制
  • 降AI率就要牺牲文笔?WriterPro第一个不服!实测对比比原文写得还好,这文笔简直绝了
  • 我不是这样
  • 10.8 总结
  • 列车售票|基于springboot 列车售票系统(源码+数据库+文档)
  • AI驱动的手动测试变革:赋能而非替代
  • 【奶茶Beta专项】【LVGL9.4源码分析】09-core-group
  • 网络安全异想天开(不定期更新)
  • 《CAPL脚本实现CANOE工具 Bus-Off自动恢复(含重试机制)》
  • 力扣1965-丢失信息的雇员
  • Flutter 测试全栈指南:从单元测试到黄金路径验证的工程化实践
  • EtherCAT 逐帧报文解析:配置SM/FMMU
  • Springboot连锁火锅店餐饮管理系统h2dg0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Windows系统文件wavemsp.dll丢失或损坏的问题 下载修复
  • Windows系统文件wdi.dll缺失或损坏问题 下载修复
  • 基于风险演进的智能测试策略设计
  • 论文查重焦虑成流量密码?虎贲等考 AI 直接用免费模式,打破行业游戏规则
  • vue基于Spring Boot的高职院校贫困生困难生智慧关爱系统的开发_f0txl8vu
  • AI 写论文哪家强?虎贲等考 AI!毕业论文全链路 “超级哇塞”,开题到答辩一路开挂~
  • Coze平台指南(1):coze平台概览与测试应用展望
  • 生物识别系统的测试安全性与漏洞防护实践
  • 我终于停止写 JUnit 了!用 JavaParser + GPT-4 自动生成 90% 覆盖率的单元测试
  • 源码读不下去?阿里架构师教你“三步走”阅读法,彻底告别“打开源码就犯困”