带有 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(网关超时)