From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-gateway/src/main/java/jnpf/config/CorsConfig.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/jnpf-gateway/src/main/java/jnpf/config/CorsConfig.java b/jnpf-gateway/src/main/java/jnpf/config/CorsConfig.java
new file mode 100644
index 0000000..e965fd7
--- /dev/null
+++ b/jnpf-gateway/src/main/java/jnpf/config/CorsConfig.java
@@ -0,0 +1,75 @@
+package jnpf.config;
+
+import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
+import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
+import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties;
+import org.springframework.cloud.gateway.route.RouteDefinitionLocator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.codec.ServerCodecConfigurer;
+import org.springframework.http.codec.support.DefaultServerCodecConfigurer;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.web.cors.reactive.CorsUtils;
+import org.springframework.web.server.WebFilter;
+import reactor.core.publisher.Mono;
+
+/**
+ * 璺ㄥ煙闂
+ *
+ * @author JNPF寮�鍙戝钩鍙扮粍
+ * @version V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙革紙https://www.jnpfsoft.com锛�
+ * @date 2021-03-24
+ */
+@Configuration
+public class CorsConfig {
+    private static final String ALL = "*";
+    private static final String MAX_AGE = "18000L";
+
+
+    @Bean
+    public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(ReactiveDiscoveryClient discoveryClient, DiscoveryLocatorProperties properties) {
+        return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
+    }
+
+
+    //AuthFilter鐨勯粯璁ら『搴忔槸-100  璺ㄥ煙閰嶇疆鍦ㄨ璇佷箣鍓嶆墽琛�
+//    @Bean
+//    @Order(-200)
+    public WebFilter corsFilter() {
+        return (ctx, chain) -> {
+            ServerHttpRequest request = ctx.getRequest();
+            if (!CorsUtils.isCorsRequest(request)) {
+                return chain.filter(ctx);
+            }
+            HttpHeaders requestHeaders = request.getHeaders();
+            ServerHttpResponse response = ctx.getResponse();
+            HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
+            HttpHeaders headers = response.getHeaders();
+            headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
+            headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders());
+            if (requestMethod != null) {
+                headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
+            }
+            headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
+            headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL);
+            headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
+            if (request.getMethod() == HttpMethod.OPTIONS) {
+                response.setStatusCode(HttpStatus.OK);
+                return Mono.empty();
+            }
+            return chain.filter(ctx);
+        };
+    }
+
+    @Bean
+    public ServerCodecConfigurer serverCodecConfigurer() {
+        return new DefaultServerCodecConfigurer();
+    }
+
+}

--
Gitblit v1.8.0