多态是支撑微服务网关鉴权逻辑灵活扩展与统一调度的关键设计手段,通过定义authstrategy接口及多种实现类,结合spring bean多态装配与路由动态匹配,实现策略可插拔、热切换与过滤器复用。

多态在微服务网关中不是用来“替代”鉴权逻辑的,而是支撑鉴权逻辑灵活扩展与统一调度的关键设计手段。它不直接做权限判断,而是让不同路由能按需加载对应鉴权策略,同时保持网关过滤器入口一致、行为可插拔。
用多态解耦鉴权策略与路由绑定
网关面对不同服务(如 /api/users/** 走 RBAC,/api/pay/** 要验支付白名单),不能硬编码 if-else。应定义统一鉴权接口,再为每类业务场景实现具体策略:
-
定义顶层策略接口:比如
AuthStrategy,含boolean check(ServerWebExchange exchange)方法 -
按路由特征分策略实现:如
UserAuthStrategy、PayAuthStrategy、AdminOnlyStrategy -
路由配置时声明策略类型:通过 YAML 的
args或元数据指定策略 Bean 名,网关启动时注入对应实例
结合 Spring 的 Bean 多态自动装配
Spring Cloud Gateway 原生支持 GlobalFilter 和 GatewayFilter 的自动注册。利用 Spring 的依赖注入和条件化 Bean 创建,可实现运行时多态选择:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 每个
AuthStrategy实现类标注@Component("userAuthStrategy")等唯一 Bean 名 - 在自定义
GlobalFilter中,根据请求路径匹配路由 ID,再通过ApplicationContext.getBean(routeId + "AuthStrategy", AuthStrategy.class)获取对应策略 - 若某路由未配策略,则 fallback 到默认策略(如仅校验 JWT 签名)
过滤器链中复用多态执行点
避免每个路由写一个过滤器,而是共用一个 AuthDispatchFilter,它本身不实现业务逻辑,只负责:
- 解析当前请求所属路由 ID(从
ServerWebExchange的getAttributes().get(GATEWAY_ROUTE_ATTR)获取) - 查出该路由绑定的
AuthStrategy实例 - 调用
strategy.check(exchange)—— 这里就是多态方法调用,实际执行哪个子类逻辑由运行时决定 - 失败则中断链并返回 401/403;成功则继续
chain.filter(...)
配合配置中心实现策略热切换
多态的价值在动态性。可将路由与策略的映射关系外置到 Nacos 或 Apollo:
- 配置项示例:
gateway.auth-strategy.users=rbac、gateway.auth-strategy.pay=whitelist - 监听配置变更,刷新内存中的路由→策略映射表
- 下次请求命中该路由时,自动加载新策略 Bean(或代理对象),无需重启网关
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










