From a7e38d8e34804323ae2f83f7729cbb0a0d56fba4 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 4 May 2025 15:50:07 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E3=80=90Gateway=20=E7=BD=91?= =?UTF-8?q?=E5=85=B3=E3=80=91CorsResponseHeaderFilter=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/cors/CorsResponseHeaderFilter.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsResponseHeaderFilter.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsResponseHeaderFilter.java index 3ea0bd218..041a98529 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsResponseHeaderFilter.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsResponseHeaderFilter.java @@ -9,7 +9,10 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; -import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 解决 Spring Cloud Gateway 2.x 跨域时,出现重复 Origin 的 BUG @@ -31,13 +34,19 @@ public class CorsResponseHeaderFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange).then(Mono.defer(() -> { - exchange.getResponse().getHeaders().entrySet().stream() + // https://gitee.com/zhijiantianya/yudao-cloud/pulls/177/ + List keysToModify = exchange.getResponse().getHeaders().entrySet().stream() .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1)) .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS))) - .forEach(kv -> kv.setValue(new ArrayList() {{ - add(kv.getValue().get(0)); - }})); + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + keysToModify.forEach(key->{ + List values = exchange.getResponse().getHeaders().get(key); + if (values != null && !values.isEmpty()) { + exchange.getResponse().getHeaders().put(key, Collections.singletonList(values.get(0))); + } + }); return chain.filter(exchange); })); }