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

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

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

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

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


一、概念与所属层级

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

二、典型使用场景

Filter

  • 编码设置(如统一 UTF-8)
  • XSS、SQL 注入防御
  • 登录认证、权限过滤
  • 资源压缩、响应头设置等底层处理

###Interceptor

  • 日志记录(Controller 层日志)
  • 权限验证(结合 SpringSecurity 或业务逻辑)
  • 参数预处理(如注入公共参数)
  • 统一异常处理或响应包装---

三、执行流程与生命周期

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 的执行日志顺序)?这样能更直观看到调用链。

相关推荐
jasnet_u4 天前
SpringMVC 请求处理深度解析:从 DispatcherServlet 到视图渲染
spring·springmvc·springboot
Cyan_RA95 天前
SpringMVC 数据格式化处理 详解
java·开发语言·spring·mvc·ssm·springmvc·数据格式化
一只大袋鼠7 天前
SpringMVC 框架中的拦截器
java·springmvc·javaweb·拦截器
一只大袋鼠7 天前
SpringMVC全局异常处理
java·开发语言·springmvc·javaweb
一只大袋鼠9 天前
JavaWeb四种文件上传方式(下篇)
java·开发语言·springmvc·javaweb
庞轩px10 天前
第三篇:SpringMVC——一个HTTP请求在Spring中经历了什么?
网络协议·spring·http·springmvc·handlermapping·前端控制器
Cyan_RA911 天前
SpringMVC 视图和视图解析器 万字详解
java·spring·mvc·springmvc·请求重定向·modelandview·视图解析器
javachen__12 天前
Spring MVC 动态支持 JSON/XML 的技巧
spring·springmvc
Cyan_RA918 天前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
傻瓜搬砖人18 天前
SpringMVC简介
springmvc