From 27e94f17e1fd94b7f5fdc3bbad63b9709fce3847 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Tue, 27 May 2025 16:32:00 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20gateway-=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=BF=87=E6=BB=A4=E5=99=A8=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/OnceTokenGatewayFilterFactory.java | 38 ++++++++++++++++++ .../src/main/resources/application-route.yaml | 1 + cloud-demo/images/image-20250527163116327.png | Bin 0 -> 3965 bytes 3 files changed, 39 insertions(+) create mode 100644 cloud-demo/gateway/src/main/java/cn/bunny/gateway/filter/OnceTokenGatewayFilterFactory.java create mode 100644 cloud-demo/images/image-20250527163116327.png 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 0000000000000000000000000000000000000000..56cd1532f16d557712c11bf0209e90821efa93ea GIT binary patch literal 3965 zcmbW4X*3&J*T-X?scS6Nno2LFrfQ8vO)Y{}YicN^O3hPfiJ~zUtv1GpSqb8*AqYWh zs40pzro<4_MaebQ5RxZ-*Sp?#Js+Mg&zEz~|E#^wUT3Yn*Z%Ef8=x5vrx+&y0N}Y} zZhQ{_VC12nRoEHns|3SbEǨf4 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