需求描述
标准网关动态路由功能是重要的一环,将路由、断言以及过滤器信息,持久化到 Mysql 中,通过配置后台页面实现路由、断言、以及过滤器等配置的增删改查。
Spring Cloud Gateway 路由及黑白名单实现背景 Spring Cloud 路由API
Spring Cloud Gateway 通过定义 RouteDefinitionRepository 来实现动态路由.
//保存路由缓存
public interface RouteDefinitionWriter {
Mono save(Mono route);
Mono delete(Mono routeId);
}
//获取路由缓存
public interface RouteDefinitionLocator {
Flux getRouteDefinitions();
}
Spring Cloud 配置文件路由加载方式
public class PropertiesRouteDefinitionLocator implements RouteDefinitionLocator {
private final GatewayProperties properties;
public PropertiesRouteDefinitionLocator(GatewayProperties properties) {
this.properties = properties;
}
@Override
public Flux getRouteDefinitions() {
return Flux.fromIterable(this.properties.getRoutes());
}
}
Spring Cloud 黑白名 FilterFactory
利用 Spring Cloud Gateway 声明的一个工厂接口 GatewayFilterFactory, 定义 黑白名单过滤器
BlacklistGatewayFilterFactory 类图
WhitelistGatewayFilterFactory 类图
动态路由设计 Spring Cloud Gateway 路由实体类
Spring Cloud Gateway 通过定义 RouteDefiniti