带有 Eureka 发现的 Spring Cloud Gateway 启用 CORS 策略

Posted

技术标签:

【中文标题】带有 Eureka 发现的 Spring Cloud Gateway 启用 CORS 策略【英文标题】:Spring Cloud Gateway with Eureka discovery enable CORS policies 【发布时间】:2018-08-03 06:08:07 【问题描述】:

我一直在寻找如何在使用 Spring Cloud Gateway 和 Eureka 发现时启用 CORS。

我的应用程序已启动并运行,一切正常。当我使用 Eureka 发现时,我使用 application.properties 中的以下属性为 Spring Cloud 网关启用了自动路由发现,因此我不需要自己指定(自定义)路由。

spring.cloud.gateway.discovery.locator.enabled = true

我在网上搜索过如何启用 CORS 无济于事,因为目前它的文档非常少。我唯一能找到的是以下文档:https://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html#_header_route_predicate_factory 在第 5.14 节中提到应用了一些默认安全标头以及如何更改它们。

它说标头 X-Permitted-Cross-Domain-Policies 默认设置为 none,这意味着 CORS 已禁用。

文档告诉我,我可以通过在 application.properties 文件中设置属性来更改此标头。

spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies = ?

但我不知道设置这个属性需要什么值,而且它没有在任何地方记录。我尝试将其设置为“任何”、“全部”和“*”,但没有成功。

有人可以帮忙吗,或者有人知道这个问题的答案吗?或者,如果我误解了某些内容,请告诉我。

【问题讨论】:

【参考方案1】:

不,当 spring.cloud.gateway.discovery.locator.enabled = true 启用 DiscoveryClient 路由定义定位器时,您无法设置额外的响应标头。

你应该定义自己的路由,并将AddResponseHeader添加到application.properties或application.properties中的过滤器中,这里有一个例子供你参考。

spring:
  cloud:
      routes:
      - id: foo_service
        uri: lb://foo_service
        predicates:
        - Path=/foo_service/**
        filters:
        - AddResponseHeader=Access-Control-Allow-Origin, *
        - RewritePath=/foo_service/(?<segment>.*), /$\segment

【讨论】:

我也遵循了同样的方法,但它对我不起作用。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'localhost:8484'。 请关注***.com/questions/46978794/…

以上是关于带有 Eureka 发现的 Spring Cloud Gateway 启用 CORS 策略的主要内容,如果未能解决你的问题,请参考以下文章

带有 Eureka 的 Spring Cloud Gateway 得到 504(网关超时)

springcloud一些基本知识

带有临时端口的 Spring-cloud brixton、eureka 和 docker

spring cloud 注册与发现Eureka

Spring Cloud Eureka服务注册与发现

Spring Cloud Eureka服务注册与发现