spring could 微服务 跨域问题(CORS )

摘要:
访问控制允许来源:“*,*”表示多重访问控制允许起源!!!所以我们需要,微服务配置+zuul配置=解决跨域问题。zuul的跨域忽略配置使用ZUL配置来忽略标头信息zuul:#需要忽略的标头信息不会传播到其他服务。敏感标头:Access Control Allow Credentials、Access Control Allow-Origgin、Access Control Allow Methods忽略的标头:Access Control-Allow-Codentials、Access-Control Allow-Origin、Access Control-Allow Methods的跨域配置、H-APP-Id、Token和APPToken微服务应用程序@Slf4j@ConfigurationpublicclassCorsConfig{privateCorsConfigurationbuildConfig(){CorsCoonfigurationcorsConfiguration=newCorsConfig();corsCoonfiguration.setAllowCredentials;//允许任何域名使用corsConfigure.addAllowedOrigin(“*”);//允许任何头corsConfigurion.addAllowedHeader(“*“);//支持任何方法corsConfigonfiguration.addAllowedMethod(“*);returncorsConfig;}@BeanPublicCorsFilterCorsFilterCast(){UrlBasedCorsConfigurationSourcesource=newUrlBasedCorsConfigurationSource();//设置source.registerCorsConfiguration;returnnewCorsFilter;}}如果没有,将这个春天添加到配置文件:aop:auto:true-proxy-target-class:true-application:name:service zuullcloud:gateway:globalcors:corsConfiguration:'[/*]':allowedHeaders:'*'allowedMethods:'*'allowedOrigins:'*'只要配置了网关,就不需要配置以下服务。两种同时配置也会导致跨域故障,这会适得其反。

问题发现

正常情况下,跨域是这样的:
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

免责声明:文章转载自《spring could 微服务 跨域问题(CORS )》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Echarts动态加载饼状图实例(二)工作问题解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

双token刷新、续期,access_token和refresh_token实效如何设置

原文链接:https://blog.csdn.net/a704397849/article/details/90216739 token认证,生成的token 过一段时间就会失效(不要故意把时间设的很长,这样不安全,token变得毫无意义!),用户需要重新登录获取token。用户经常使用客户端,使用过程中 由于token到期 客户端跳转到登录界面要求登录,...

uni-app request POST 请求方式不加 header头会默认为 OPTIONS

背景:鄙人在测试 uniapp 的使用时,发现以 POST 方式进行网络请求时,如果不添加 header 头 是无法进行正常的网络请求的,此时默认的请求方式被认定为 OPTIONSuni.request 发起请求 源码截图 网络请求示意图   此时,如果添加如下的 header头 header: { 'content-type': 'app...

Spring Cloud Security集成CAS (单点登录)对微服务认证

一、前言   由于leader要求在搭好的spring cloud 框架中加入对微服务的认证包括单点登录认证,来确保系统的安全,所以研究了Spring Cloud Security这个组件。在前面搭好的demo中,如何确保微服务的安全,为整个系统添加安全控制,就需要用到Spring Cloud Security。用户通过服务网关zuul来访问任何一个微服务...

Facebook应用程序权限请求以及数据获取

最近因工作需要研究了一下facebook的API调用. 虽然是一个不存在的网站,但也是工作内容的一部分,需要认真对待.既然对于咱们国人来说不存在,当然也就没有汉字可看了.英文文档让我头晕了好一阵子,吐了好几次之后终于摸清了脉络. 大致步骤是: 1、创建一个应用程序,可以获得App ID/API Key和App Secret。 2、使用URL: https:...

python 钉钉 消息推送 文件传输

1、消息推送 钉钉群添加机器人 方式一:钉钉 群设置添加 群设置 -> 智能群助手 -> 添加机器人 -- 自定义机器人 设置如下: 这里选择 自定义关键字 填写"消息推送" ,只有发送的消息包含了 这个关键字,才会推送这个消息 复制webhook,代码需要用到 defsend_massage(message): webhook =...

项目配置中 提示access denied的问题 解决方案

项目配置中 提示access denied的问题,一般原因是你的服务器或虚拟主机的pathinfo没开.... 具体解决办法如下 在PHP安装文件夹下找到php.ini。在文件中搜索cgi.fix_pathinfo,并把cgi.fix_pathinfo=0,改成 1 。注意要去掉注释,然后重启Apache即可; 其他的方法:我在网上查过可以修改Apache...