中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決springcloudgateway請求跨域問題

發布時間:2021-09-27 15:44:13 來源:億速云 閱讀:172 作者:小新 欄目:編程語言

小編給大家分享一下如何解決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<Void> 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<String>() {{              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請求跨域問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大庆市| 英德市| 阿拉善盟| 民勤县| 赤峰市| 勃利县| 交城县| 华安县| 穆棱市| 奎屯市| 前郭尔| 苍溪县| 灵山县| 西城区| 临沧市| 长宁区| 当雄县| 荆门市| 靖远县| 墨脱县| 宁晋县| 荥阳市| 咸阳市| 吐鲁番市| 咸宁市| 大姚县| 奉化市| 邛崃市| 三原县| 资源县| 天峨县| 伊川县| 广丰县| 七台河市| 清河县| 三河市| 平塘县| 揭东县| 稷山县| 满洲里市| 和硕县|