成都网站建设设计

将想法与焦点和您一起共享

如何解决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://chengdu.cdxwcx.cn/article/jioejp.html