diff --git a/gateway/pom.xml b/gateway/pom.xml index 946f76a..94d43ed 100644 --- a/gateway/pom.xml +++ b/gateway/pom.xml @@ -18,6 +18,11 @@ + + org.projectlombok + lombok + annotationProcessor + org.springframework.cloud spring-cloud-starter-gateway diff --git a/gateway/src/main/java/cn/bunny/config/VipRoutePredicateFactory.java b/gateway/src/main/java/cn/bunny/config/VipRoutePredicateFactory.java new file mode 100644 index 0000000..d0a8fab --- /dev/null +++ b/gateway/src/main/java/cn/bunny/config/VipRoutePredicateFactory.java @@ -0,0 +1,54 @@ +package cn.bunny.config; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Getter; +import lombok.Setter; +import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; +import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.server.ServerWebExchange; + +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; + +@Component +public class VipRoutePredicateFactory extends AbstractRoutePredicateFactory { + public VipRoutePredicateFactory() { + super(Config.class); + + } + + @Override + public List shortcutFieldOrder() { + return Arrays.asList("param", "value"); + } + + @Override + public Predicate apply(Config config) { + return (GatewayPredicate) serverWebExchange -> { + ServerHttpRequest request = serverWebExchange.getRequest(); + + String first = request.getQueryParams().getFirst(config.getParam()); + + return StringUtils.hasText(first) && first.equals(config.getValue()); + }; + } + + /** + * 可以配置的参数 + */ + @Getter + @Setter + @Validated + public static class Config { + @NotEmpty + private String param; + + @NotEmpty + private String value; + } +} diff --git a/gateway/src/main/resources/application-route.yml b/gateway/src/main/resources/application-route.yml index e627402..d7a0e66 100644 --- a/gateway/src/main/resources/application-route.yml +++ b/gateway/src/main/resources/application-route.yml @@ -12,7 +12,13 @@ spring: args: param: wd regexp: .* + # 从这个往上只要:http://localhost:8800/s?wd=49 即可通过 + - name: Vip # 名称为 Vip RoutePredicateFactory + args: + param: user + value: bunny + # 从这个往上:http://localhost:8800/s?wd=49&user=bunny - id: service-cloud1 uri: lb://service-cloud1 predicates: diff --git a/service/cloud-demo1/src/main/resources/application.yml b/service/cloud-demo1/src/main/resources/application.yml index 0cda823..0234607 100644 --- a/service/cloud-demo1/src/main/resources/application.yml +++ b/service/cloud-demo1/src/main/resources/application.yml @@ -35,6 +35,7 @@ spring: transport: dashboard: 192.168.3.132:8858 eager: true # 项目启动就连接 + feign: sentinel: enabled: true \ No newline at end of file