Spring Boot如何實現跨域資源共享(CORS)?

在這里插入圖片描述

🍅 作者簡介:哪吒,CSDN2021博客之星亞軍🏆、新星計劃導師?、博客專家💪

🍅 哪吒多年工作總結:Java學習路線總結,搬磚工逆襲Java架構師

🍅 技術交流:定期更新Java硬核干貨,不定期送書活動

🍅 點擊文末名片,關注公眾號【哪吒編程】,回復 1024 ,獲取《10萬字208道Java經典面試題總結(附答案)》2024修訂版pdf,背題更方便,一文在手,面試我有

目錄

    • Spring Boot如何實現跨域資源共享(CORS)?
      • 方法一:使用@CrossOrigin注解
      • 方法二:配置全局CORS
      • 總結一下,Spring Boot 中如何解決跨域問題 ?

嗨,你好呀,我是哪吒。

Spring Boot如何實現跨域資源共享(CORS)?

方法一:使用@CrossOrigin注解

在控制器類或者具體的方法上使用@CrossOrigin注解。這個注解是Spring框架自帶的,用于允許跨域訪問。

@RestController
public class MyController {@CrossOrigin(origins = "http://example.com") // 允許指定域名的跨域請求@GetMapping("/api/data")public ResponseEntity<?> getData() {// ...}
}

你還可以使用通配符來允許所有域名的跨域請求:

@CrossOrigin(origins = "*") // 允許所有域名的跨域請求

方法二:配置全局CORS

創建一個配置類,使用WebMvcConfigurer的實現來全局配置CORS。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**") // 允許跨域請求的路徑.allowedOrigins("http://example.com") // 允許的域名列表.allowedMethods("GET", "POST", "PUT", "DELETE") // 允許的HTTP方法.allowedHeaders("*") // 允許的HTTP頭.allowCredentials(true) // 是否允許證書(cookies).maxAge(3600); // 預請求的有效期}
}

同樣,你也可以使用通配符來允許所有域名:

registry.addMapping("/api/**").allowedOrigins("*")// 其他配置...

注意事項:

  • 使用@CrossOrigin注解時,它只影響帶有該注解的控制器或方法。
  • 使用全局CORS配置時,它會影響所有未明確拒絕的跨域請求。
  • 出于安全考慮,生產環境中應該明確允許的域名,而不是使用通配符*。
  • CORS配置中的allowedHeaders參數應該明確指定所需的頭信息,而不是使用*,以減少安全風險。

通過以上兩種方法,你可以在Spring Boot應用中實現跨域資源共享,從而允許不同域的前端應用訪問你的后端服務。

總結一下,Spring Boot 中如何解決跨域問題 ?

在Spring Boot中解決跨域問題,可以采用以下幾種方法:

  1. 使用@CrossOrigin注解:可以在控制器類或方法上添加@CrossOrigin注解來允許特定的跨域請求。這個注解支持指定允許的源、方法、頭部等信息。
  2. 通過配置文件:在application.properties或application.yml中添加全局的CORS配置,以允許所有域的跨域請求或者限制只允許特定的域名進行跨域請求。
  3. 自定義CorsFilter:創建一個CorsFilter類,實現Filter接口,并在doFilter方法中添加CORS相關的響應頭。然后在Spring Boot的主配置類中注冊這個過濾器。
  4. 使用WebMvcConfigurer:通過實現WebMvcConfigurer接口的addCorsMappings方法,可以更細致地控制哪些路徑需要CORS支持。
  5. 利用第三方庫:也可以使用如cors-filter等第三方庫來簡化CORS配置過程。
  6. 使用ResponseEntity:在返回ResponseEntity時,可以手動設置Access-Control-Allow-Origin等響應頭來實現跨域。
  7. 使用全局異常處理:通過全局異常處理機制,捕獲特定的異常并設置相應的CORS響應頭。
  8. 使用Spring Security:如果項目中使用了Spring Security,還需要確保Spring Security的配置不阻止跨域請求。
  9. 使用代理服務器:在某些情況下,也可以通過設置代理服務器來解決跨域問題,但這通常不是首選方案。
  10. 使用JSONP:對于GET請求,還可以考慮使用JSONP來繞過瀏覽器的同源策略,但這僅適用于GET請求,并且需要在前端和后端都進行相應的配置。
  11. 使用服務端路由:在服務端使用路由機制,將請求轉發到不同的域,從而避免直接跨域。
  12. 使用WebSocket:對于實時通信,可以考慮使用WebSocket協議,它不受同源策略的限制。

跨域問題是由于瀏覽器的同源策略引起的,它要求只有來自同一源(協議+域名+端口)的腳本才能訪問某些資源。在開發前后端分離的應用時,跨域問題是一個常見的挑戰,因此了解如何在Spring Boot中解決這個問題是非常重要的。


🏆文章收錄于:Spring Boot 進階實戰

哪吒數年工作總結之結晶。

🏆哪吒多年工作總結:Java學習路線總結,搬磚工逆襲Java架構師

華為OD機試 2023B卷題庫瘋狂收錄中,刷題點這里

刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,發現新題目,隨時更新,全天CSDN在線答疑。

點擊下方名片,回復1024,獲取《10萬字208道Java經典面試題總結(2024修訂版).pdf 》

在這里插入圖片描述

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

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

相關文章

1.k8s:架構,組件,基礎概念

目錄 一、k8s了解 1.什么是k8s 2.為什么要k8s &#xff08;1&#xff09;部署方式演變 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平臺對比 二、k8s架構、組件 1.k8s架構 2.k8s基礎組件 3.k8s附加組件 …

5種算法簡單介紹:貪心算法、分治法、回溯法、動態規劃法、最大流算法

1. 貪心算法&#xff08;Greedy Algorithm&#xff09; 定義&#xff1a; 貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優&#xff08;即最有利&#xff09;的選擇&#xff0c;從而希望導致結果是全局最好或最優的算法。貪心算法并不是對所有問題都能得到整體最優…

【STM32-存儲器映射】

STM32-存儲器映射 ■ STM32F1-4G地址空間分成8個塊■ STM32F1-Block0■ STM32F1-Block1■ STM32F1-Block2■ STM32F1- ■ STM32F1-4G地址空間分成8個塊 ■ STM32F1-Block0 有出廠 BootLoader 就可以使用串口下載程序。如Keil5圖中IROM地址是0x8000000 開始 就是flash地址 ■ S…

使用方法——注意事項及好處

public class MethodDemo01 {public static void main(String[] args) {// 目標&#xff1a;掌握定義方法的完整性&#xff0c;清楚使用方法的好處。// 需求&#xff1a;假如現在有很多程序員都要進行2個整數求和的操作。//1、李工。int rs sun(10,20);System.out.println(&q…

低代碼開發平臺賦能智慧警務管理:創新引領下的安全新篇章

隨著信息技術的飛速發展&#xff0c;智慧警務管理已經成為維護社會治安、保障人民安全的重要手段。在這一背景下&#xff0c;低代碼開發平臺以其高效、靈活、易用的特性&#xff0c;為智慧警務管理注入了新的活力。本文將探討低代碼開發平臺在智慧警務管理中的應用&#xff0c;…

vue-codemirror的簡單使用

功能 代碼編輯器 安裝 命令行&#xff1a;npm install codemirror vue-codemirror --save 單文件引入 import { Codemirror } from vue-codemirror 單文件展示 <codemirrorv-model"localCode"class"code-mirror":placeholder"placeholder&qu…

[vscode] 自定義log快捷生成代碼

1、進入設置頁面&#xff1a;文件>首選項>用戶代碼片段>選擇設置的語言。 2. 關于代碼段顯示位置的調整設置 文件>首選項>設置&#xff0c;搜索代碼段或snippetSuggestions&#xff0c;修改為”top”; 參考&#xff1a; vscode自定義log快捷生成代碼

vue 設置定時器在某個時間段執行

業務需求&#xff1a;數據大屏頁面中的某個方法需要在今天12:00執行一次&#xff0c;或是在今天的17:00執行一次&#xff0c; 這里用到 setTimeout定時器來實現。 //獲取某個時間的時間戳 getCurrentDate(time) {let now new Date();let year now.getFullYear();let mont…

直流電機雙閉環調速Simulink仿真

直流電機參數&#xff1a; 仿真模型算法介紹&#xff1a; 1&#xff09;三相整流橋&#xff0c;采用半控功率器件SCR晶閘管&#xff1b; 2&#xff09;采用轉速環、電流環 雙閉環控制算法&#xff1b; 3&#xff09;外環-轉速環&#xff0c;采用PI 比例積分控制&#xff1b;…

Java進階-Lambda

Java進階-Lambda 前言Lambda表達式什么是Lambda表達式初識Lambda表達式Lambda表達式的簡單使用Lambda表達式格式分析與傳統接口方法實現的比較 理解Lambda表達式函數式編程非純函數實例純函數示例函數式編程在Lambda表達式中的體現 閉包閉包與Lambda表達式的示例 類型推導-匿名…

633. 平方數之和(中等)

633. 平方數之和 1. 題目描述2.詳細題解3.代碼實現3.1 Python3.2 Java內存溢出溢出代碼正確代碼與截圖 1. 題目描述 題目中轉&#xff1a;633. 平方數之和 2.詳細題解 本題是167. 兩數之和 II - 輸入有序數組&#xff08;中等&#xff09;題目的變型&#xff0c;由兩數之和變…

數字圖像分析(第二部分)

文章目錄 第8章 圖像分割圖像分割定義閾值分割依賴像素的閾值選取Otsus方法依賴區域的閾值選取依賴坐標的閾值選取變化閾值法區域生長法分裂合并方法分水嶺算法聚類分割算法K-meansAP算法Graph cut第9章 圖像特征表達基于全局特征的圖像表達直方圖GIST基于局部特征的圖像表達簡…

ROS中里程計崩潰的原因分析

里程計節點崩潰可能由多種原因引起&#xff0c;以下是一些可能的因素&#xff1a; 1. **場景特征不足**&#xff1a;如果機器人或車輛所處環境缺乏足夠的特征&#xff08;如在單調、重復紋理的地面或墻面&#xff09;&#xff0c;視覺里程計等定位方法可能因找不到匹配特征而失…

JavaScript通用下載方法,但jpg圖片下載打不開

通用下載方法&#xff0c;通過Blob的方式&#xff0c;訪問Url地址&#xff0c;下載對應的圖片&#xff0c;excel等文件。 axios({method: "get",url,responseType: "blob",}).then((res: any) > {const link document.createElement("a");co…

安裝IIS報錯 0x8024402C

我在windows2012上安裝.NET 運行環境時&#xff0c; 先安裝的sqlserver&#xff0c; 然后提示缺少framework3.5的安裝之類的。 然后又進行IIS和.NET運行庫framework的安裝&#xff0c;結果也提示安裝失敗&#xff0c;錯誤代碼0x8024402C。 我照著網上的幫助卸載了sqlserver 并…

前端打包配置+nginx配置實現部署及部署地址帶特定前綴的幾種方式

前端打包后要部署到服務器&#xff0c;在瀏覽器中可以通過url訪問到我們開發的系統&#xff0c;通過nginx代理在工作中是一種很常用的方式。 這里以本地為例&#xff0c;把本地電腦當作一個服務器&#xff0c;實現普通部署、帶特定前綴等 前端使用vue-clivue作為例子 以下內容…

第2次作業

問題&#xff1a;cs與msf權限傳遞&#xff0c;以及mimikatz抓取win2012明文密碼。 一、CS與MSF權限傳遞 CS&#xff08;Cobalt Strike&#xff09;和MSF&#xff08;Metasploit Framework&#xff09;是兩種常用的滲透測試工具&#xff0c;它們都支持在滲透過程中傳遞權限。以…

1.3 Sqoop 數據同步工具詳細教程

Apache Sqoop 是一個開源工具&#xff0c;用于在 Apache Hadoop 和關系型數據庫&#xff08;如 MySQL、Oracle、PostgreSQL 等&#xff09;之間高效傳輸數據。Sqoop 可以將結構化數據從關系型數據庫導入到 Hadoop 的 HDFS、Hive 和 HBase 中&#xff0c;也可以將數據從 Hadoop …

git 多分支實現上傳文件但避免沖突檢測

文章目錄 背景實現步驟 背景 對于某些通過命令生成的配置文件&#xff08;如 TypeScript 類型文件等&#xff09; 實現步驟 1

背包問題(動歸)

目錄 問能否能裝滿背包&#xff08;或者最多裝多少&#xff09;&#xff1a;dp[j] max(dp[j], dp[j - nums[i]] nums[i]); 對應題目如下&#xff1a; 416.分割等和子集 (物品正序&#xff0c;背包倒序) 問裝滿背包有幾種方法&#xff1a;dp[j] dp[j - nums[i]] &#xff…