温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

拦截器执行顺序怎样

发布时间:2026-08-30 05:02:38 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

拦截器的执行顺序取决于具体技术栈和运行阶段,不过无论是哪种框架,核心思想都很类似:请求阶段正向执行,响应阶段反向执行(像栈一样)。下面按常见场景给你系统总结一下。


一、Spring MVC 拦截器(最常见)

核心接口

HandlerInterceptor

三个方法

preHandle  →  controller 前
postHandle →  controller 后,视图渲染前
afterCompletion → 整个请求完成后

执行顺序(单个拦截器)

preHandle
    ↓
Controller
    ↓
postHandle
    ↓
视图渲染
    ↓
afterCompletion

多个拦截器的执行顺序(重点)

假设有两个拦截器:

Interceptor1
Interceptor2

注册顺序决定执行顺序

registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");
registry.addInterceptor(new Interceptor2()).addPathPatterns("/**");

执行顺序(非常重要)

Interceptor1.preHandle
    ↓
Interceptor2.preHandle
    ↓
Controller
    ↓
Interceptor2.postHandle
    ↓
Interceptor1.postHandle
    ↓
Interceptor2.afterCompletion
    ↓
Interceptor1.afterCompletion

preHandle 正序执行
postHandle / afterCompletion 逆序执行


preHandle 返回 false 会怎样?

  • 后续拦截器 不再执行
  • Controller 不执行
  • 已执行 preHandle 且返回 true 的拦截器,会执行 afterCompletion

二、Spring Boot / WebFlux(响应式)

接口

WebFilter

执行特点

  • 基于 链式调用(Mono / Flux)
  • 类似中间件模型
  • 顺序由 @Order 或注册顺序决定
WebFilter1 → WebFilter2 → handler → WebFilter2 → WebFilter1

三、MyBatis 拦截器

接口

Interceptor

执行顺序

  • 取决于:
    • 插件注册顺序
    • @Intercepts 注解
    • 拦截的方法(Executor / StatementHandler 等)

特点

plugin → intercept → 目标方法 → 返回结果


四、通用规律(面试/记忆神器)

所有拦截器 / 过滤器 / AOP 的本质都是“洋葱模型”

请求 → 拦截器1 → 拦截器2 → 业务
返回 ← 拦截器2 ← 拦截器1

五、拦截器 vs 过滤器 vs AOP 执行顺序

类型 执行阶段 顺序特点
Filter Servlet 层 早于拦截器
Interceptor Spring MVC Controller 前后
AOP 方法调用 最细粒度

整体顺序:

Filter → Interceptor → AOP → Controller

六、一句话总结

拦截器按注册顺序执行 preHandle,按逆序执行 postHandle 和 afterCompletion;请求像进栈,响应像出栈。

如果你用的是 某个具体框架(如 Spring Cloud Gateway、Dubbo、Vue axios),可以告诉我,我可以给你精确到源码级的执行顺序图。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI