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

📅 2026/7/8 9:19:55
spring cloud里面GlobalFilter和HandlerInterceptor的执行顺序
在Spring CloudGateway中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 在微服务内部拦截。理解它们在整个请求链路中的不同位置有助于你更准确地设计全局性的鉴权、日志或路由策略。