可重复注解本身不参与路径拦截编排,真正实现动态多路径拦截的是注解驱动的过滤器注册机制与运行时路由匹配逻辑:通过@Repeatable定义拦截策略注解,绑定至路由metadata,解析为有序可开关拦截链,并支持配置中心热更新。

可重复注解本身不直接参与拦截路径编排,它只是让同一类型的注解能在类或方法上多次声明。真正实现“动态编排多条拦截路径”的,是结合注解驱动的过滤器注册机制与运行时路由匹配逻辑——关键在如何把多个注解解析为有序、可组合、可开关的拦截链。
一、定义可重复的拦截策略注解
先声明一个允许重复使用的拦截注解,用于标记需要启用哪些拦截能力:
- 用@Repeatable指定容器注解(如@Interceptors)
- 每个子注解携带拦截器类型、执行顺序(order)、启用开关(enabled)和可选参数
- 例如:@AuthCheck(order = 1, enabled = true)、@RateLimit(order = 2, qps = 100)、@TraceLog(order = 3)
二、在网关路由配置中关联注解元数据
不是把注解写在Controller上,而是绑定到路由规则中——比如通过自定义路由元数据(metadata)字段或扩展RouteDefinition:
- YAML 配置中支持嵌套注解式声明:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
metadata:
interceptors:
- type: AuthCheck
order: 1
- type: RateLimit
order: 2
qps: 50 - 启动时解析 metadata,将每条记录转为对应拦截器实例,并按 order 排序形成拦截链
三、运行时按需组装并执行拦截链
在GlobalFilter中根据当前请求匹配的路由ID,查出已注册的拦截器列表,构建执行链:
- 使用Ordered接口或@Order注解统一管理优先级
- 拦截器实现统一接口(如GatewayInterceptor),含preHandle和postHandle方法
- 支持跳过:某拦截器返回false可中断后续执行(如鉴权失败直接响应401)
- 异常兜底:任一拦截器抛异常,由网关统一捕获并降级处理(如熔断、日志告警)
四、配合配置中心实现热更新拦截路径
把拦截器配置从代码/配置文件移到 Nacos 或 Apollo,做到不重启变更拦截行为:
- 监听配置变更事件,动态刷新某路由下的拦截器列表
- 旧拦截器实例优雅下线,新链路立即生效(注意线程安全与 Bean 生命周期)
- 配合灰度标识(如 header 中的x-deploy-env: gray),对特定流量启用额外拦截器

















