自定义路由断言工厂
- 我们来设定一个场景:假设我们的应用仅仅让age在(min,max)之间的人来访问。
- 第1步:在配置文件中,添加一个age的断言配置
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr:192.168.110.130:8848
gateway:
routes:
- id: product_route
uri: http://localhost:8081
order: 1
predicates:
- Path=/product-serv/**
- Age=18,16
filters:
- StripPrefix=1
@Component
public class AgeRoutePredicateFactory extends AbstractRoutePredicateFactory<AgeRoutePredicateFactory.Config> {
public AgeRoutePredicateFactory() {
super(AgeRoutePredicateFactory.Config.class);
}
public List<String> shortcutFieldOrder() {
return Arrays.asList("minAge","maxAge");
}
public Predicate<ServerWebExchange> apply(AgeRoutePredicateFactory.Config config) {
return new Predicate<ServerWebExchange>() {
@Override
public boolean test(ServerWebExchange serverWebExchange) {
String ageStr = serverWebExchange.getRequest().getQueryParams().getFirst("age");
if(!StringUtils.isEmpty(ageStr)){
int age = Integer.parseInt(ageStr);
if (age<config.getMaxAge()&&age>config.getMinAge()){
return true;
}else {
return false;
}
}
return false;
}
};
}
@Data
@NoArgsConstructor
public static class Config {
private int minAge;
private int maxAge;
}
}