記錄一次Spring Cloud Gateway配置的跨域處理:解決 ‘Access-Control-Allow-Origin‘ 頭包含多個值的問題

在微服務架構中,前端與后端分離已經成為一種常見模式。這種模式下,前后端通常會部署在不同的域名或端口上,這就導致了跨域資源共享(CORS)問題。最近,在我們的項目中,我們遇到了這樣一個問題:“The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed”?

🛠? 問題描述

當瀏覽器發起一個跨域請求時,它首先會發送一個預檢請求(OPTIONS),以確定服務器是否允許該跨域請求。然而,在我們的案例中,出現了如下錯誤提示:?

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed

這意味著響應頭Access-Control-Allow-Origin被設置了兩次,這通常是由于在多個地方配置了CORS支持,例如在每個微服務和網關中分別進行了配置,從而導致沖突。?

🔧 解決方案

為了解決上述問題,我們需要采取以下兩個步驟:

第一步:刪除注冊到Nacos中的服務中配置的CorsConfig

為了避免重復設置CORS頭信息,我們應該從各個微服務中移除任何現有的CORS配置。具體操作如下:

  • 找到并刪除所有微服務中的CorsConfig類。
  • 確保這些服務不再自動添加CORS相關的HTTP響應頭。

這樣做可以確保只有網關負責處理跨域請求,避免了多次設置相同響應頭的情況。?

第二步:在Gateway中配置跨域

接下來,在Spring Cloud Gateway中進行統一的CORS配置。這里提供了一個簡單的示例配置:

import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();// 設置允許跨域訪問的源config.addAllowedOrigin("*");// 設置允許的方法config.addAllowedMethod("*");// 設置允許的頭信息config.addAllowedHeader("*");// 允許憑證config.setAllowCredentials(true);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

這段代碼創建了一個全局的CORS過濾器,適用于所有的路由。通過這種方式,我們可以確保每次跨域請求都被正確地處理,而不會出現重復的Access-Control-Allow-Origin響應頭。?

路由規則配置解析

簡要解析Spring Cloud Gateway的路由規則定義,以及其如何工作。

- id: admin_routeuri: lb://mall-adminpredicates:- Path=/api/**filters:- RewritePath=/api/(?<segment>.*),/mall-admin/${segment}

通過這種配置方式,當客戶端發送請求到/api/users時,Gateway首先檢查是否符合Path=/api/**條件。如果符合條件,則應用RewritePath過濾器將路徑轉換為/mall-admin/users,然后根據負載均衡策略將請求轉發給mall-admin服務的一個實例進行處理

結論

請注意,盡管上述配置使用了*作為允許的源,但在生產環境中,出于安全考慮,應該明確指定具體的允許源,而不是使用通配符*。此外,如果需要更復雜的CORS策略,如針對不同路徑應用不同的CORS規則,則可能需要進一步定制化配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91820.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掃雷游戲完整代碼

掃雷游戲完整代碼test.cgame.cgame.h

vue打包后如何在本地運行?

1.打包前的配置打開vue.config.js配置如圖所示內容//打包配置文件 module.exports {assetsDir: static,parallel: false,publicPath: ./, };這段代碼是Vue.js項目的打包配置文件&#xff0c;主要功能包括&#xff1a; - assetsDir: static - 設置靜態資源文件夾名為static - p…

Python特性工廠函數詳解:優雅管理屬性驗證

在Python中&#xff0c;特性(property)是一種強大的工具&#xff0c;它允許我們在訪問屬性時執行自定義邏輯。本文將深入分析一個名為quantity的特性工廠函數&#xff0c;它用于確保屬性值必須為正數。 特性工廠函數的概念 特性工廠函數是一種創建并返回property對象的函數&…

Ubuntu系統VScode實現opencv(c++)鼠標操作與響應

在之前的創作中心-CSDN滾動條調整圖片亮度-CSDN博客創作中心-CSDN中,我們已經了解了滾動條實現亮度以及對比度調節,為了實現對圖像中感興趣區域&#xff08;ROI, Region of Interest&#xff09;的交互式選取&#xff0c;本文利用 OpenCV 提供的鼠標事件回調機制&#xff0c;設…

True or False? 基于 BERT 學生數學問題誤解檢測

True or False? 基于 BERT 學生數學問題誤解檢測 代碼詳見&#xff1a;https://github.com/xiaozhou-alt/Student_Math_Misconception 文章目錄True or False? 基于 BERT 學生數學問題誤解檢測一、項目介紹二、文件夾結構三、數據集介紹四、BERT 模型介紹五、項目實現1. 數據…

小程序基于vue+nodejs的私人定做訂制訂單發布與對應商品出售平臺

文章目錄項目介紹主要技術與實現手段具體實現截圖關于我本系統開發思路研究思路、方法和步驟java類核心代碼部分展示系統測試本系統技術可行性分析源碼獲取詳細視頻演示或者查看其他版本&#xff1a;文章底部獲取博主聯系方式&#xff01;項目介紹主要技術與實現手段 uni-app框…

為什么要有動態內存分配?

文章目錄1.為什么要有動態內存分配2.malloc和free2.1 malloc2.2 free3.calloc和realloc3.1 calloc3.2 realloc4.常見的動態內存的錯誤4.1 對NULL指針的解引用操作4.2 對動態開辟空間的越界訪問4.3 對?動態開辟內存使?free釋放4.4 使?free釋放?塊動態開辟內存的?部分4.5 對…

docker hub 拉取鏡像失敗報Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting

自己記錄一把&#xff0c;給兄弟們避坑 1.上問題報錯代碼 [rootlocalhost ~]# docker pull hello-world Using default tag: latestError response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connectio…

Hive數倉部署/分層/ETL腳本基礎指南

部署Hive數倉及分層基礎指南 部署和構建一個Hive數倉涉及多個步驟&#xff0c;包括設置Hadoop集群、配置Hive、設計數據倉庫架構以及實現ETL&#xff08;Extract, Transform, Load&#xff09;過程。下面是一個詳細的指南&#xff0c;幫助你完成這些步驟。 1. 設置Hadoop集群 首…

深入 Go 底層原理(六):垃圾回收(GC)

1. 引言Go 語言自帶垃圾回收&#xff08;Garbage Collection, GC&#xff09;&#xff0c;讓開發者從手動管理內存的繁重任務中解脫出來。Go 的 GC 以其低延遲和并發性而聞名&#xff0c;其目標是在不長時間暫停&#xff08;Stop The World, STW&#xff09;整個程序的情況下完…

專網內網IP攻擊防御:從應急響應到架構加固

內網IP攻擊防御&#xff1a;從應急響應到架構加固內網IP攻擊的隱蔽性遠超外網威脅&#xff0c;其本質是信任邊界內的權限濫用。應對需遵循"識別-隔離-溯源-加固"四步法則&#xff0c;兼顧應急止損與長效防御。應急處置&#xff1a;30分鐘響應窗口1. 流量阻斷&#xf…

Git、Gitee、GitHub、GitLab完整講解:從基礎到進階

第一部分&#xff1a;Git是什么&#xff1f; &#x1f4da;比喻&#xff1a;Git就像是一本"時光日記本" ? 每一段代碼的改動&#xff0c;Git都會幫你記錄下來&#xff0c;像是在寫日記。 ? 如果出現問題或者想查看之前的版本&#xff0c;Git可以帶你"穿越回…

WinForm之CheckBox 控件

CheckBox&#xff08;復選框&#xff09;是 WinForm 中用于實現 “多項選擇” 的控件&#xff0c;允許用戶從一組選項中選擇任意數量的項&#xff08;包括零項、一項或多項&#xff09;&#xff0c;適用于需要同時選擇多個選項的場景&#xff08;如愛好、權限設置、功能開關等&…

鯨魚優化算法(Whale Optimization Algorithm, WOA)是一種受座頭鯨捕食行為啟發的群體智能優化算法,由Seyedali Mirjalili于2016年提出

鯨魚優化算法(Whale Optimization Algorithm, WOA)是一種受座頭鯨捕食行為啟發的群體智能優化算法,由Seyedali Mirjalili于2016年提出。 它通過模擬鯨魚的狩獵策略(特別是“氣泡網捕食”行為)來解決優化問題,廣泛應用于函數優化、工程設計、機器學習參數優化等領域。以下…

信息量,驚奇度,熵、KL散度(相對熵),交叉熵、最大似然估計MLE與最小化交叉熵的等價證明、

一&#xff1a; 一些基本概念 1.1 信息量:特定事件所攜帶的信息多少信息量衡量的是特定事件所攜帶的信息多少&#xff0c;其數學定義為&#xff1a;其中p(x)是事件x發生的概率。核心思想&#xff1a;越罕見的事件&#xff0c;其攜帶的信息量越大&#xff1b;越常見的事件&#…

VBA 64位API聲明語句第012講

跟我學VBA&#xff0c;我這里專注VBA, 授人以漁。我98年開始&#xff0c;從源碼接觸VBA已經20余年了&#xff0c;隨著年齡的增長&#xff0c;越來越覺得有必要把這項技能傳遞給需要這項技術的職場人員。希望職場和數據打交道的朋友&#xff0c;都來學習VBA,利用VBA,起碼可以提高…

深入理解Java中String.intern()方法:從原理到并發控制實踐

深入理解 Java 中 String.intern () 方法&#xff1a;從原理到并發控制實踐 在 Java 開發中&#xff0c;String.intern()方法是一個看似簡單卻蘊含深意的 API。它在字符串常量池管理、內存優化以及并發控制等場景中有著關鍵作用。本文將從底層原理出發&#xff0c;結合實際案例…

在Linux中創建LVGL應用

在Linux中創建LVGL應用 簡介 上一篇文章介紹了在imx6上開發UI的流程 . 這篇接上文&#xff0c; 介紹具體的開發步驟。 1. 創建項目主目錄 mkdir my_lvgl_project cd my_lvgl_project2. 初始化 Git 倉庫 (可選但推薦) git init echo "# My Project with Dependencies&…

大模型對比評測:Qwen2.5 VS Gemini 2.0誰更能打?

一、背景與選型關鍵 在 AI 應用落地的時代&#xff0c;“AI大模型選型對比”成為關鍵環節。選擇合適的模型要綜合考量性能、上下文長度、推理能力、中文/編程支持、成本等多維度指標。 本文重點比較 Gemini2.0Flash-Lite &#xff08;Preview&#xff09;、Gemini2.0Flash &a…

轉置卷積解釋與示例計算

文章目錄轉置卷積的三種等價實現方法&#xff1a;原理、公式與等價性分析數學定義與核心公式方法一&#xff1a;零填充翻轉核卷積&#xff08;數學定義方法&#xff09;原理與公式等價性說明方法二&#xff1a;直接位置映射&#xff08;pytorch框架高效實現&#xff09;原理與公…