GateWay跨域問題解決(雙重)

SpringCloud版本Greenwich.RELEASE
Springboot版本2.1.4.RELEASE
gateway中全局的跨域問題解決兩種方式优训,一種是創(chuàng)建配置類不推薦,如有需要可以自己查詢相關(guān)資料;另一種是使用配置文件泰讽,相對簡單甜紫,如下:

spring:
  cloud:
    gateway:
      # gateway的全局跨域請求配置
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowCredentials: true
            allowedMethods: "*"

上述屬性值可以根據(jù)自己的需要配置,"*"表示所有雄嚣。

正常情況下基于以上配置即可晒屎,但是由于目前的項目的下游微服務(wù)也配置了可以跨域的相關(guān)配置,這就導(dǎo)致返回的ResponseHeader中有多重屬性缓升,這個多重屬性瀏覽器是不認的鼓鲁。所以基于此的處理方法,把下游的所有配置都取消港谊,但是下游服務(wù)數(shù)量又太多骇吭,所以通過查詢找到了以下的方案,參考https://github.com/spring-cloud/spring-cloud-gateway/issues/728

spring:
  cloud:
    gateway:
      # gateway的全局跨域請求配置
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowCredentials: true
            allowedMethods: "*"
      default-filters:
      - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE

在配置文件中添加上面的過濾器歧寺,這個過濾器的作用是剔除重復(fù)的響應(yīng)頭燥狰。gateway的內(nèi)置的過濾器可以參考這篇文章:https://blog.csdn.net/tuyong1972873004/article/details/107123254
內(nèi)置的過濾器有很多斜筐,可以根據(jù)自己的實際需求去配置龙致。

正常情況下以上配置就可以解決上述的問題,但是發(fā)現(xiàn)后臺報錯顷链,錯誤信息提示無法找到DedupeResponseHeaderGateWayFilter目代。后來查詢資料才發(fā)現(xiàn),這個過濾器是GreenwichSR2版本提供的新特性,當(dāng)前的springcloud版本太低榛了。所以最后沒有辦法在讶,只能手動實現(xiàn)一個和DedupeResponseHeaderGateWayFilter功能相同的過濾器。代碼如下:

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.ArrayList;


@Component("corsResponseHeaderFilter")
public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {

    @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之后
        // 即待處理完響應(yīng)體后接著處理響應(yīng)頭
        return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
    }
}

加上以上配置類后霜大,問題解決构哺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市战坤,隨后出現(xiàn)的幾起案子曙强,更是在濱河造成了極大的恐慌,老刑警劉巖湖笨,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旗扑,死亡現(xiàn)場離奇詭異,居然都是意外死亡慈省,警方通過查閱死者的電腦和手機臀防,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來边败,“玉大人袱衷,你說我怎么就攤上這事⌒Υ埽” “怎么了致燥?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長排截。 經(jīng)常有香客問我嫌蚤,道長,這世上最難降的妖魔是什么断傲? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任脱吱,我火速辦了婚禮,結(jié)果婚禮上认罩,老公的妹妹穿的比我還像新娘箱蝠。我一直安慰自己,他們只是感情好垦垂,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布宦搬。 她就那樣靜靜地躺著,像睡著了一般劫拗。 火紅的嫁衣襯著肌膚如雪间校。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天页慷,我揣著相機與錄音撇簿,去河邊找鬼聂渊。 笑死,一個胖子當(dāng)著我的面吹牛四瘫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欲逃,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼找蜜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稳析?” 一聲冷哼從身側(cè)響起洗做,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彰居,沒想到半個月后诚纸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡陈惰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年畦徘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抬闯。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡井辆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溶握,到底是詐尸還是另有隱情杯缺,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布睡榆,位于F島的核電站萍肆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胀屿。R本人自食惡果不足惜塘揣,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碉纳。 院中可真熱鬧勿负,春花似錦、人聲如沸劳曹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铁孵。三九已至锭硼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜕劝,已是汗流浹背檀头。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工轰异, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暑始。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓搭独,卻偏偏與公主長得像,于是被迫代替她去往敵國和親廊镜。 傳聞我的和親對象是個殘疾皇子牙肝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容