如何解决springcloudgateway请求跨域问题-创新互联

小编给大家分享一下如何解决springcloudgateway请求跨域问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

站在用户的角度思考问题,与客户深入沟通,找到柘荣网站设计与柘荣网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、做网站、企业官网、英文网站、手机端网站、网站推广、域名与空间、雅安服务器托管、企业邮箱。业务覆盖柘荣地区。

代码如下

@Configurationpublic class CorsConfig implements GlobalFilter, Ordered {  private static final String ALL = "*";  private static final String MAX_AGE = "18000L";  @Bean  public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,                                    DiscoveryLocatorProperties properties) {    return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);  }  @Bean  public ServerCodecConfigurer serverCodecConfigurer() {    return new DefaultServerCodecConfigurer();  }   //添加请求头   @Bean  public WebFilter corsFilter() {    return (ServerWebExchange ctx, WebFilterChain chain) -> {      ServerHttpRequest request = ctx.getRequest();      if (!CorsUtils.isCorsRequest(request)) {        return chain.filter(ctx);      }      HttpHeaders requestHeaders = request.getHeaders();      ServerHttpResponse response = ctx.getResponse();      HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();      HttpHeaders headers = response.getHeaders();      headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());      headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders());      if (requestMethod != null) {        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());      }      headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");      headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL);      headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);      if (request.getMethod() == HttpMethod.OPTIONS) {        response.setStatusCode(HttpStatus.OK);        return Mono.empty();      }      return chain.filter(ctx);    };  }  //将请求头中有多个值的去掉 这是该版本的一个bug  @Override  public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {    return chain.filter(exchange).then(Mono.defer(() -> {      exchange.getResponse().getHeaders().entrySet().stream()          .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))          .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)              || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)))          .forEach(kv -> {            kv.setValue(new ArrayList() {{              add(kv.getValue().get(0));            }});          });      return chain.filter(exchange);    }));  }  @Override  public int getOrder() {    // 指定此过滤器位于NettyWriteResponseFilter之后    // 即待处理完响应体后接着处理响应头    return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;  }}

此处的spring-cloud-gateway的版本是2.1.3.RELEASE

以上是“如何解决springcloudgateway请求跨域问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网页标题:如何解决springcloudgateway请求跨域问题-创新互联
转载来于:http://myzitong.com/article/gpods.html