spring cloud里面GlobalFilter和HandlerInterceptor的执行顺序

📅 2026/7/8 9:41:12 👁️ 阅读次数 📝 编程学习
spring cloud里面GlobalFilter和HandlerInterceptor的执行顺序

在Spring Cloud(Gateway)中,GlobalFilter 和 HandlerInterceptor 不存在直接的执行顺序比较,因为它们位于请求链路中完全不同的层级和时间点。

GlobalFilter 在 API网关层 执行,而 HandlerInterceptor 在请求到达后端微服务后,于Spring MVC框架内执行。

⏳ 完整请求链路中的执行顺序
一个请求从客户端到后端服务,其完整的执行顺序如下:

客户端 发起请求

API网关层 (Spring Cloud Gateway)

GlobalFilter (前置逻辑): 按 Order 值从小到大执行。

GatewayFilter (路由过滤器, 前置逻辑): 与 GlobalFilter 合并排序后执行。

路由转发: 请求被转发到目标微服务。

GatewayFilter (后置逻辑): 按 Order 值从大到小执行。

GlobalFilter (后置逻辑): 按 Order 值从大到小执行。

后端微服务 (Spring Boot)

Servlet Filter: 标准的Servlet过滤器。

HandlerInterceptor.preHandle(): 在Controller方法执行之前执行。

Controller / 业务逻辑

HandlerInterceptor.postHandle(): 在Controller方法执行之后,视图渲染之前执行。

HandlerInterceptor.afterCompletion(): 在请求完全结束后执行。

响应 返回给客户端

🎯 GlobalFilter 的执行顺序(网关层)
GlobalFilter 的执行顺序由 Ordered 接口的 getOrder() 方法决定,数值越小,优先级越高。

pre 阶段(请求前): Order 值越小,越先执行。

post 阶段(响应后): Order 值越小,越后执行。

Order值相同时的规则
当多个过滤器的 Order 值相同时:

同为 GlobalFilter: 执行顺序可能取决于类文件的加载顺序,不确定。

GlobalFilter vs GatewayFilter: GlobalFilter 会优先执行。

🎯 HandlerInterceptor 的执行顺序(微服务层)
HandlerInterceptor 的执行顺序由注册时的顺序决定。

preHandle(): 按照注册的顺序执行。

postHandle() 和 afterCompletion(): 按照注册的逆序执行。

💎 总结
简单来说,GlobalFilter 在网关层面拦截,HandlerInterceptor 在微服务内部拦截。理解它们在整个请求链路中的不同位置,有助于你更准确地设计全局性的鉴权、日志或路由策略。