Browse Source

Merge remote-tracking branch 'origin/qianshan_data_bureau' into qianshan_data_bureau

Administrator 4 năm trước cách đây
mục cha
commit
471f4bd020

+ 1 - 1
boman-auth/src/main/java/com/boman/auth/controller/TokenController.java

@@ -16,7 +16,7 @@ import com.boman.system.api.model.LoginUser;
  * @author ruoyi
  */
 @RestController
-@CrossOrigin
+//@CrossOrigin
 public class TokenController
 {
     @Autowired

+ 61 - 0
boman-gateway/src/main/java/com/boman/gateway/config/CorsConfig.java

@@ -0,0 +1,61 @@
+package com.boman.gateway.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.reactive.CorsWebFilter;
+import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
+import org.springframework.web.util.pattern.PathPatternParser;
+
+/** 跨域请求
+ * @author shiqian
+ * @date 2021年06月04日 14:28
+ **/
+@Configuration
+public class CorsConfig {
+
+//    private static final String MAX_AGE = "18000L";
+
+
+    @Bean
+    public CorsWebFilter corsFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        config.addAllowedMethod("*");
+        config.addAllowedOrigin("*");
+        config.addAllowedHeader("*");
+
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
+        source.registerCorsConfiguration("/**", config);
+
+        return new CorsWebFilter(source);
+    }
+
+//    @Bean
+//    public WebFilter corsFilter() {
+//        return (ServerWebExchange ctx, WebFilterChain chain) -> {
+//            ServerHttpRequest request = ctx.getRequest();
+//
+//            if (CorsUtils.isCorsRequest(request)) {
+//                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, "*");
+//                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);
+//        };
+//    }
+
+}

+ 38 - 0
boman-gateway/src/main/java/com/boman/gateway/filter/CorsResponseHeaderFilter.java

@@ -0,0 +1,38 @@
+package com.boman.gateway.filter;
+
+import com.google.common.collect.Lists;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+/** 跨域请求头重复处理过滤器防止出现多个
+ * @author shiqian
+ * @date 2021年06月04日 14:53
+ **/
+@Component("corsResponseHeaderFilter")
+public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
+
+    @Override
+    public int getOrder() {
+        return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
+    }
+
+
+    @Override
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+        return chain.filter(exchange).then(Mono.defer(() -> {
+            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(Lists.newArrayList(kv.getValue().get(0))));
+
+            return chain.filter(exchange);
+        }));
+    }
+}