1、類必須是Spring組件 Bean
2、類必須加上RoutePredicateFactory作為結尾
3、類必須繼承AbstractRoutePredicateFactory
4、類必須聲明靜態內部類,聲明屬性來接收配置文件中對應的斷言的信息
5、需要結合shortcutFieldOrder進行綁定
6、通過apply進行邏輯判斷,true:配置成功,false:配置失敗
package com.wsm.predicates; import org.springframework.cloud.gateway.handler.AsyncPredicate; import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import org.springframework.web.server.ServerWebExchange; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; @Component public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> { public CheckAuthRoutePredicateFactory() { super(CheckAuthRoutePredicateFactory.Config.class); } @Override public List<String> shortcutFieldOrder() { return Arrays.asList("name"); } @Override public Predicate<ServerWebExchange> apply(CheckAuthRoutePredicateFactory.Config config) { return new GatewayPredicate() { @Override public boolean test(ServerWebExchange serverWebExchange) { if(config.getName().equals("zhangsan")){ return true; } return false; } }; } //用於接收配置文件中斷言的信息 @Validated public static class Config { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }
- CheckAuth=zhangsan
server: port: 8060 spring: application: name: api-gateway cloud: # gateway的配置 gateway: # 路由規則 routes: - id: order_route # 路由的唯一標識, 路由到 order # uri: http://localhost:8020 # 需要轉發的地址 uri: lb://order-nacos-service # 需要轉發的地址 lb:使用nacos中的本地負載均衡策略 # 斷言規則 用於路由規則的匹配 predicates: - Path=/order-serv/** # http://localhost:8060/order-serv/order/add 路由轉到 # http://localhost:8020/order-serv/order/add # - After=2017-01-20T17:42:47.789-07:00[Asia/Shanghai] # - Header=X-Request-Id,\d+ # - Method=GET # - Query=name,zhangsan|lisi - CheckAuth=zhangsan filters: - StripPrefix=1 # 轉發之前去掉第一層路徑 # http://localhost:8020/order-serv/order/add 過慮成 # http://localhost:8020/order/add # 配置 Nacos nacos: server-addr: 127.0.0.1:8848 discovery: # server-addr: 127.0.0.1:8848 username: nacos password: nacos namespace: public
- CheckAuth=lisi