欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring?cloud?Gateway如何處理跨域問題

 更新時間:2024年04月22日 10:34:14   作者:jia_jia_le94  
這篇文章主要介紹了spring?cloud?Gateway如何處理跨域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

spring cloud Gateway處理跨域問題

先簡單描述一下架構(gòu),項目采用前后端分離的方式,前端是nodejs來搞layui(單頁版),后端采用spring cloud Alibaba,網(wǎng)關(guān)用的是spring cloud Gateway,然后出現(xiàn)了跨域問題。

一開始百度我以為只需要在Controller上加上@CrossOrigin就能搞定,后來發(fā)現(xiàn)出現(xiàn)了很多問題。

問題一

因為后端還有網(wǎng)關(guān),所以如果你沒有自定的headers的頭信息那么是可以通過 spring cloud Gateway ,但是如果有加自定義Headers,這樣就會被 spring cloud Gateway給攔截,說:跨域請求中沒有自定的header

錯誤信息如下

考慮之后覺得應(yīng)該需要在spring cloud Gateway上添加跨域配置

添加方式有許多種,這里我寫出嘗試過可以用的兩種:

一在application.yml中添加配置

spring:
  application:
    name: nb-web
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowCredentials: true
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - OPTION

第二種再啟動類上添加bean:

 /**
     * 配置跨域
     * @return
     */
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // cookie跨域
        config.setAllowCredentials(Boolean.TRUE);
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        // 配置前端js允許訪問的自定義響應(yīng)頭
        config.addExposedHeader("Authorization:");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }

這樣就能解決自定義headers被攔截和跨域問題,但是這樣配置緊接著下一個問題又出來了

問題二

由于跨域配置會進(jìn)行疊加,舉個例子你在服務(wù)一種添加了跨域配置,在spring cloud Gateway中也添加了,那這樣就會產(chǎn)生headers重復(fù)的問題:

前端就會報錯,

所以你必須要進(jìn)行header去重,具體辦法如下:在spring cloud Gateway的過濾器中添加過濾配置

spring:
  application:
    name: nb-web
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      default-filters:
        - DedupeResponseHeader=Vary Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_UNIQUE
        - DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_FIRST

這樣就能把重復(fù)的header給去掉了

這樣跨域問題基本就能解決了,但是因為我這邊需要進(jìn)行session共享,所以需要給前端傳入cookie,那么問題又來了,后端配置的cookie傳不出去

原因有兩個1:沒有加上headers上面加上Access-Control-Allow-Credentials: true,這個可以在

 gateway:
      default-filters:
              - AddResponseHeader=Access-Control-Allow-Credentials,true

添加上,還有一個就是前端的ajax上沒有加上:

 , xhrFields: {withCredentials: true}
                , crossDomain: true

這樣瀏覽器就能保存cookie

至此問題就能解決了。在查閱過程中我看到關(guān)于跨域配置重復(fù)問題是存在bug的,具體內(nèi)容可以參考:

http://www.dbjr.com.cn/program/319980elx.htm

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java同步鎖Synchronized底層源碼和原理剖析(推薦)

    Java同步鎖Synchronized底層源碼和原理剖析(推薦)

    這篇文章主要介紹了Java同步鎖Synchronized底層源碼和原理剖析,釋放后,進(jìn)入減減操作、直到為0然后喚醒隊列,讓他們?nèi)帄Z鎖,循環(huán)前面步驟,對Java同步鎖Synchronized相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • 詳解5種Java中常見限流算法

    詳解5種Java中常見限流算法

    在高并發(fā)系統(tǒng)中,出于系統(tǒng)保護(hù)角度考慮,通常會對流量進(jìn)行限流;不但在工作中要頻繁使用,而且也是面試中的高頻考點(diǎn)。本文就為大家整理了5種Java中常見限流算法,需要的可以參考一下
    2023-04-04
  • 新手必備的IDEA常用設(shè)置總結(jié)

    新手必備的IDEA常用設(shè)置總結(jié)

    今天給大家總結(jié)了一些IDEA的常用設(shè)置,文中有非常詳細(xì)的圖文介紹,對正在學(xué)習(xí)使用IDEA的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • MyBatis框架搭建時依賴包引入異常的問題解決

    MyBatis框架搭建時依賴包引入異常的問題解決

    在使用IDEA環(huán)境搭建MyBatis框架時,可能會因為依賴包版本過低導(dǎo)致兼容性問題,本文就來介紹一下MyBatis框架搭建時依賴包引入異常的問題解決,感興趣的可以來了解一下
    2024-10-10
  • Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Java制作一個在線寄查快遞系統(tǒng),文中采用的技術(shù)有java、SpringBoot、FreeMarker、Mysql,需要的可以參考一下
    2022-02-02
  • 2024.1.2 安裝JDK和Eclipse并配置java編譯環(huán)境的過程

    2024.1.2 安裝JDK和Eclipse并配置java編譯環(huán)境的過程

    這篇文章主要介紹了2024.1.2 安裝JDK和Eclipse并配置java編譯環(huán)境,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Java判斷兩個集合是否具有交集及如何獲得交集詳解

    Java判斷兩個集合是否具有交集及如何獲得交集詳解

    這篇文章主要給大家介紹了關(guān)于Java判斷兩個集合是否具有交集及如何獲得交集的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • SpringBoot2.7.14整合redis7的詳細(xì)過程

    SpringBoot2.7.14整合redis7的詳細(xì)過程

    這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • SpringBoot項目中獲取IP地址的實(shí)現(xiàn)示例

    SpringBoot項目中獲取IP地址的實(shí)現(xiàn)示例

    OkHttp是一個由Square開發(fā)的高效、現(xiàn)代的HTTP客戶端庫,本文主要介紹了SpringBoot項目中獲取IP地址的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Springcloud服務(wù)注冊consul客戶端過程解析

    Springcloud服務(wù)注冊consul客戶端過程解析

    這篇文章主要介紹了Springcloud服務(wù)注冊consul客戶端過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論