spring could 微服務 跨域問題(CORS )


問題發現

正常情況下,跨域是這樣的:
1. 微服務配置跨域+zuul不配置=有跨域問題
2. 微服務配置+zuul配置=有跨域問題
3. 微服務不配置+zuul不配置=有跨域問題
4. 微服務不配置+zuul配置=ok

然而雲環境中每個服務自己有跨域解決方案,而網關需要做最外層的跨域解決方案.如果服務已有跨域配置網關也有,會出現*多次配置問題。

Access-Control-Allow-Origin:"*,*"

也就是multiple Access-Control-Allow-Origin
!!!所以我們就要,微服務配置+zuul配置=解決跨域問題

zuul的跨域忽略配置

使用ZUUL配置忽略頭部信息

zuul:
  #需要忽略的頭部信息,不在傳播到其他服務
sensitive-headers: Access-Control-Allow-Credentials,Access-Control-Allow-Origin,Access-Control-Allow-Methods
ignored-headers: Access-Control-Allow-Credentials,Access-Control-Allow-Origin, Access-Control-Allow-Methods,H-APP-Id,Token,APPToken

 

微服務應用的跨域配置

@Slf4j
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        // 允許任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 允許任何頭
        corsConfiguration.addAllowedHeader("*");
        // 允許任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 對接口配置跨域設置
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

}

如果上面不行再配置文件中再加上這

spring:
  aop:
    auto: true
    proxy-target-class: true
  application:
    name: service-zuul
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: '*'
            allowedMethods: '*'
            allowedOrigins: '*'

只要網關配置就好 , 底下的服務不需要配置。
兩個同時配置還導致了 跨域失敗 適得其反。

關於zuul 的配置 github上有   https://github.com/wangbensen/common-parent.git


免責聲明!

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



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