SpringCloudGetaway 允許跨域設置


Gateway 不是使用的傳統的SpringMVC,所以,針對SpringMVC的跨域設置,在Gateway中是不生效的。所以需要先關閉webflux的cors,再從gateway的filter里邊設置cors就行了。

簡單設置

代碼配置:

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;

/**
 * 跨域配置
 */
@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允許所有請求方法,例如get,post等
        config.addAllowedMethod("*");
        //允許所有的請求來源
        config.addAllowedOrigin("*");
        //允許所有請求頭
        config.addAllowedHeader("*");
        //允許攜帶cookie
        config.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        //對所有經過網關的請求都生效
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

Yaml 配置:

spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
              # 允許攜帶認證信息
            allow-credentials: true
            # 允許跨域的源(網站域名/ip),設置*為全部
            allowedOrigins: "*"
            # 允許跨域的method, 默認為GET和OPTIONS,設置*為全部
            allowedMethods: "*"
             # 允許跨域請求里的head字段,設置*為全部
            allowedHeaders: "*"

經過上面設置,就可以處理簡單的跨域問題。


多重跨域
有時候,網關調用的后端微服務,本身設置了跨域,Gateway 和下游系統同時支持了跨域,都會向 response header 中增加Access-Control-Allow-Origin *,出現重復的 * ,導致跨域失效。在Gateway中可以使用 DedupeResponseHeader 來處理一下響應頭重復的問題。

spring:
  cloud:
    gateway:
      default-filters:
        - DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

DedupeResponseHeader 有三個策略,我們使用RETAIN_UNIQUE即可:

RETAIN_FIRST:僅保留第一個值(默認)。
RETAIN_LAST:僅保留最后一個值。
RETAIN_UNIQUE:按照第一次相遇的順序保留所有唯一值。
注意: 該版本需要使用高版本的 Getaway,推薦使用 G 版以上。
原文鏈接:https://blog.csdn.net/qq_37958845/article/details/119023786

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM