|
|
@@ -0,0 +1,36 @@
|
|
|
+package com.leanwo.gateway.config;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import org.springframework.lang.Nullable;
|
|
|
+import org.springframework.web.cors.CorsConfiguration;
|
|
|
+import org.springframework.web.cors.reactive.DefaultCorsProcessor;
|
|
|
+
|
|
|
+public class MyCorsProcessor extends DefaultCorsProcessor{
|
|
|
+ /**
|
|
|
+ * Check the origin and determine the origin for the response. The default
|
|
|
+ * implementation simply delegates to
|
|
|
+ * {@link CorsConfiguration#checkOrigin(String)}.
|
|
|
+ *
|
|
|
+ * @param config
|
|
|
+ * @param requestOrigin
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected String checkOrigin(CorsConfiguration config, @Nullable String requestOrigin) {
|
|
|
+ String allowedOrigin = super.checkOrigin(config, requestOrigin);
|
|
|
+ List<String> allowedOrigins = config.getAllowedOrigins();
|
|
|
+ if (null == allowedOrigin && allowedOrigins != null && allowedOrigins.size() > 0) {
|
|
|
+ for (String origin : allowedOrigins) {
|
|
|
+ origin = origin.trim();
|
|
|
+ if (origin.contains(CorsConfiguration.ALL) && origin.length() > 1) {
|
|
|
+ String matchDomain = origin.substring(origin.indexOf(CorsConfiguration.ALL) + 1);
|
|
|
+ if (requestOrigin.endsWith(matchDomain)) {
|
|
|
+ allowedOrigin = requestOrigin;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return allowedOrigin;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|