微服务网关需统一全局过滤器规范:明确职责拆分与命名(如AuthGlobalFilter)、固定执行顺序(用常量管理优先级)、标准化前后置处理结构、禁用阻塞调用、统一封装错误响应并阻断链路。

在微服务网关中定义统一的全局过滤器行为规范,核心是让所有团队成员遵循一致的结构、执行顺序、日志格式和异常处理逻辑,而不是只关注单个功能实现。Spring Cloud Gateway(包括 Jeecg-Boot 的网关模块)本身不强制规范,但可通过工程约束+约定来落地。
明确过滤器职责边界与命名规范
避免“一个过滤器干所有事”。应按关注点拆分,每个全局过滤器只做一类事,并在类名中体现用途:
- AuthGlobalFilter:仅处理 Token 解析、白名单放行、权限校验
- TraceIdGlobalFilter:仅注入或透传链路 ID(如 X-B3-TraceId)
- LogAccessGlobalFilter:仅记录请求路径、方法、耗时、状态码,不修改请求/响应体
- 禁止出现 AllInOneGlobalFilter 或 CommonFilter 这类模糊命名
统一执行顺序与优先级管理
多个全局过滤器之间必须有可预期的执行时序。推荐用常量代替魔法数字,集中管理:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在项目公共模块定义枚举或接口,例如:
public interface FilterOrder {<br> int TRACE_ID = -100;<br> int AUTH = -50;<br> int RATE_LIMIT = -20;<br> int LOG_ACCESS = 100;<br>} - 每个过滤器的
getOrder()方法直接返回对应常量,不写硬编码数值 - 关键前置动作(如鉴权)必须早于业务日志;关键后置动作(如指标上报)必须晚于响应生成
标准化请求预处理与响应后处理模板
所有全局过滤器的 filter() 方法需保持结构清晰,区分前后置阶段,且禁止阻塞式调用:
立即学习“Java免费学习笔记(深入)”;
- 前置处理(请求到达时):提取 header、校验必要参数、设置 exchange 属性(如
exchange.getAttributes().put("user_id", userId)) - 后置处理(响应返回前):用
.then(Mono.fromRunnable(...))或.doOnSuccess(...)执行非阻塞逻辑,如打点、日志、Header 注入 - 禁止在 filter 中调用
block()、toFuture().get()等同步等待操作 - 若需异步依赖(如查 Redis),使用 WebFlux 兼容的响应式客户端(如
ReactiveRedisTemplate)
错误响应统一封装与拦截机制
当全局过滤器中发生校验失败或异常,必须终止链路并返回标准错误格式,而非抛出原始异常:
- 提供统一工具方法,例如
ResponseUtils.writeError(exchange, HttpStatus.UNAUTHORIZED, "token expired") - 该方法内部设置响应头(Content-Type)、写入 JSON body、设置状态码,并返回
Mono.empty()阻断后续执行 - 所有鉴权、限流、参数校验类过滤器,一旦不通过,必须调用该工具,不可直接 return chain.filter(exchange)
- 全局异常处理器(
@ControllerAdvice)不处理过滤器阶段的业务拒绝,只捕获未被拦截的运行时异常

















