• 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

  • 相关阅读:
    缓慢画点功能实现的两个方法
    c++编译器对新建字符型数组内部数据的初始化
    在win7下用net命令无法实现对用户的创建(未完成)
    关于sleep函数的一些问题和资料
    C++ 临时笔记
    boost::progress_timer 与 boost::progress_display
    《C++ Primer》 Part IV(ObjectOriented and Generic Programming)
    Linux下常用软件
    《C++STL基础及应用》读书笔记
    boost::asio
  • 原文地址:https://www.cnblogs.com/xiaowangbangzhu/p/12048828.html
Copyright © 2020-2023  润新知