diff --git a/cloud-demo/gateway/src/main/java/cn/bunny/gateway/filter/OnceTokenGatewayFilterFactory.java b/cloud-demo/gateway/src/main/java/cn/bunny/gateway/filter/OnceTokenGatewayFilterFactory.java new file mode 100644 index 0000000..0aa2f30 --- /dev/null +++ b/cloud-demo/gateway/src/main/java/cn/bunny/gateway/filter/OnceTokenGatewayFilterFactory.java @@ -0,0 +1,38 @@ +package cn.bunny.gateway.filter; + +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory; +import org.springframework.http.HttpHeaders; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; + +import java.util.UUID; + +@Component +public class OnceTokenGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { + + @Override + public GatewayFilter apply(NameValueConfig config) { + // 每次相应之前添加一次性令牌 + + return (exchange, chain) -> chain.filter(exchange) + .then(Mono.fromRunnable(() -> { + ServerHttpResponse response = exchange.getResponse(); + HttpHeaders headers = response.getHeaders(); + + String name = config.getName(); + String value = config.getValue(); + + if ("uuid".equalsIgnoreCase(value)) { + value = UUID.randomUUID().toString(); + } + + if ("jwt".equalsIgnoreCase(value)) { + value = "JWT的token"; + } + + headers.add(name, value); + })); + } +} diff --git a/cloud-demo/gateway/src/main/resources/application-route.yaml b/cloud-demo/gateway/src/main/resources/application-route.yaml index e11fd62..6affeca 100644 --- a/cloud-demo/gateway/src/main/resources/application-route.yaml +++ b/cloud-demo/gateway/src/main/resources/application-route.yaml @@ -8,6 +8,7 @@ spring: - Path=/api/order/** filters: - AddRequestHeader=X-Request-red, blue + - OnceToken=X-Response-Token, uuid - id: product-route uri: lb://service-product diff --git a/cloud-demo/images/image-20250527163116327.png b/cloud-demo/images/image-20250527163116327.png new file mode 100644 index 0000000..56cd153 Binary files /dev/null and b/cloud-demo/images/image-20250527163116327.png differ