Search code examples
javacorsspring-cloud-gateway

Spring Cloud Gateway and CORS header


I am trying to proxy-forward a request using org.springframework.cloud.gateway.mvc.ProxyExchange. The call is working fine.

In my scenario I like to integrate it with the browser calls, but get a CORS-header issue there.

(1) Source in the controller:

@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) Source of used 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();
}

How can I add CORS support for Spring Cloud Gateway ?


Solution

  • There is nothing specific to cloud MVC. Even if it is a proxy, we have to add CORS support to the web application.

    As it is a spring boot project, I have added spring security as well here. Added a filter which can populate the headers did the job.

    Note : add whatever required headers for your OPTION call (preflight), Also support GET,POST, DELETE, etc calls accordingly.

    The response headers can be added to the http response