Spring Cloud Gateway 和 CORS 标头

Posted

技术标签:

【中文标题】Spring Cloud Gateway 和 CORS 标头【英文标题】:Spring Cloud Gateway and CORS header 【发布时间】:2021-06-04 03:47:02 【问题描述】:

我正在尝试使用org.springframework.cloud.gateway.mvc.ProxyExchange 代理转发请求。 通话正常。

在我的场景中,我喜欢将它与浏览器调用集成,但是 在那里得到一个 CORS 标头问题。

(1) 控制器中的来源:

@RequestMapping(value = "/public**", method = RequestMethod.GET)
public ResponseEntity<byte[]> forwardHttpRequestForGet(
    HttpServletRequest httpServletRequest,
    @RequestParam MultiValueMap<String, String> requestParams,
  @RequestHeader HttpHeaders requestHeaders,
  ProxyExchange<byte[]> proxy) throws Exception 
  
  ResponseEntity<byte[]> responseEntity = cloudGatewayService.proxyForwardToApplication(httpServletRequest, requestParams,requestHeaders, proxy);
  return responseEntity;

(2) 使用CloudGatewayService的来源:

public ResponseEntity<byte[]> proxyForwardToApplication(
    HttpServletRequest httpServletRequest,
    MultiValueMap<String, String> requestParams,
    HttpHeaders requestHeaders, ProxyExchange<byte[]> proxy) throws Exception 
  
  String authorizationHeader = httpServletRequest.getHeader(AUTHORIZATION_HEADER);
  String forwardUrl = "newUrl"
  
  return proxy.sensitive("cookie")
    .headers(requestHeaders)
    .uri(forwardUrl).get();

如何为 Spring Cloud Gateway 添加 CORS 支持?

【问题讨论】:

您是否尝试过按照文档在 application.yml 中添加配置? cloud.spring.io/spring-cloud-gateway/reference/html/… @mehowthe 我已经浏览了文档。会试试这个 【参考方案1】:

没有什么特定于云 MVC。即使是代理,我们也得给 web 应用添加 CORS 支持。

因为它是一个 Spring Boot 项目,所以我在这里也添加了 Spring Security。添加了一个可以填充标题的过滤器完成了这项工作。

注意:为您的 OPTION 调用(预检)添加任何所需的标头, 也相应地支持GET、POST、DELETE等调用。

响应头可以添加到http响应中

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Spring Cloud Gateway 和 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)

Spring Cloud(18)——gateway

浅谈Spring Cloud Gateway技术

聊聊spring cloud gateway的NettyConfiguration

Spring Cloud Gateway初体验

Spring Cloud —— Gateway 服务网关