springboot配置cors攔截器與cors解釋

文章目錄

  • cors?
  • 代碼

cors?

CORS(跨域資源共享)的核心機制是 由后端服務器(bbb.com)決定是否允許前端(aaa.com)的跨域請求

當瀏覽器訪問 aaa.com 的頁面,并向 bbb.com/list 發起請求時,瀏覽器會先檢查是否跨域:由于 aaa.com 和 bbb.com 的域名不同,屬于跨域請求;觸發 CORS,瀏覽器會發送 OPTIONS 預檢請求到后端,請求頭包含 Origin: aaa.com,服務器(bbb.com)返回響應頭

  • Access-Control-Allow-Origin: aaa.com
  • Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Methods: GET, POST // 該字段的目的是明確允許哪些業務 HTTP 方法
    這個接口 options 響應頭告知前端 aaa.com 做跨域請求過來是可以的
    如果 cors 驗證失敗,瀏覽器會攔截請求并拋出 CORS 錯誤

其實本質是可以這么理解:具體哪個域名可以請求我的后端服務接口,是由我后端自己控制的,我后端可以控制成讓 aaa.com 的域名可以訪問,也可以控制成讓 bbb.com 的域名可以訪問,本質是瀏覽器先發一個 options 預檢請求,通過響應頭讓瀏覽器知道能否跨域訪問,可以的話就訪問了,不可以的話瀏覽器就報 cors 錯誤

瀏覽器發送 OPTIONS 預檢請求的唯一前提是 跨域且非簡單請求,如果請求是同源的,無論是否為非簡單請求,瀏覽器都不會發送 OPTIONS 預檢請求

特殊的:
簡單請求:請求 method 是 get/post/head 其一,且 req header 只能包含

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type(值只能是 application/x-www-form-urlencoded 或者 multipart/form-data 或者 text/plain)
    如果是簡單請求,即使瀏覽器域名和頁面接口請求域名不一致,也不會觸發瀏覽器 cors,自然也不需要預檢請求 options
    簡單請求之所以不會觸發 cors,是因為瀏覽器這些請求風險較低,

代碼

攔截器:

@Component
public class CorsInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 先判斷 reqHeader 中 Origin 對應的瀏覽器訪問的域名如果是后端允許跨域的域名 aaa.com,是的話,后續就塞入到 Access-Control-Allow-Origin 中,表示告訴前端,這個域名的跨域請求是被允許的response.setHeader("Access-Control-Allow-Origin", "aaa.com");response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Max-Age", "3600");return true;}
}

注冊攔截器:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate CorsInterceptor corsInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(corsInterceptor).addPathPatterns("/**") // 所有路徑生效.excludePathPatterns("/public/**"); // 排除無需跨域的路徑}
}

也有其他方式配置 cors:

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("aaa.com").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("Content-Type", "Authorization").allowCredentials(true).maxAge(3600);}
}

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

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

相關文章

國芯思辰| 同步降壓轉換器CN2020應用于智能電視,替換LMR33620

在智能電視不斷向高畫質、多功能、智能化發展的當下,其內部電源管理系統的性能至關重要。同步降壓轉換器可以為智能電視提供穩定、高效的運行。 國芯思辰CN2020是一款脈寬調制式同步降壓轉換器。內部集成兩個功率MOS管,在4.5~18V寬輸入電壓范圍內可以持…

API 版本控制:使用 ABP vNext 實現版本化 API 系統

🚀API 版本控制:使用 ABP vNext 實現版本化 API 系統 📚 目錄 🚀API 版本控制:使用 ABP vNext 實現版本化 API 系統一、背景切入 🧭二、核心配置規則 📋2.1 前置準備:NuGet 包與 usi…

Android高級開發第四篇 - JNI性能優化技巧和高級調試方法

文章目錄 Android高級開發第四篇 - JNI性能優化技巧和高級調試方法引言為什么JNI性能優化如此重要?第一部分:JNI性能基礎知識JNI調用的性能開銷何時使用JNI才有意義? 第二部分:核心性能優化技巧1. 減少JNI調用頻率2. 高效的數組操…

小白的進階之路系列之十----人工智能從初步到精通pytorch綜合運用的講解第三部分

本文將介紹Autograd基礎。 PyTorch的Autograd特性是PyTorch靈活和快速構建機器學習項目的一部分。它允許在一個復雜的計算中快速而簡單地計算多個偏導數(也稱為梯度)。這個操作是基于反向傳播的神經網絡學習的核心。 autograd的強大之處在于它在運行時動態地跟蹤你的計算,…

43. 遠程分布式測試實現

43. 遠程分布式測試實現詳解 一、遠程測試環境配置 1.1 遠程WebDriver服務定義 # Chrome瀏覽器遠程服務地址 chrome_url rhttp://localhost:5143# Edge瀏覽器遠程服務地址 edge_url rhttp://localhost:9438關鍵概念:每個URL對應一個獨立的WebDriver服務典型配置…

Python爬蟲(40)基于Selenium與ScrapyRT構建高并發動態網頁爬蟲架構:原理、實現與性能優化

目錄 一、引言二、技術背景1. 動態頁面處理痛點2. 架構設計目標 三、核心組件詳解1. Selenium Grid集群部署2. ScrapyRT服務化改造3. 智能等待策略 四、系統架構圖五、性能優化實踐1. 資源隔離策略2. 并發控制算法3. 監控體系 六、總結與展望🌈Python爬蟲相關文章&a…

【存儲基礎】SAN存儲基礎知識

文章目錄 1. 什么是SAN存儲?2. SAN存儲組網架構3. SAN存儲的主要協議SCSI光纖通道(FC)協議iSCSIFCoENVMe-oFIB 4. SAN存儲的關鍵技術Thin Provision:LUN空間按需分配Tier:分級存儲Cache:緩存機制QoS&#x…

TDengine 運維——巡檢工具(定期檢查)

背景 TDengine 在運行一段時間后需要針對運行環境和 TDengine 本身的運行狀態進行定期巡檢,本文檔旨在說明如何使用巡檢工具對 TDengine 的運行環境進行自動化檢查。 安裝工具使用方法 工具支持通過 help 參數查看支持的語法 Usage: taosinspect [OPTIONS]Check…

DHCP應用

一、DHCP介紹 在LAN(局域網)中我們常會遇到以下的情況: 1.不知道如何配置IP地址及相關信息的員工,無法上網;2.IP地址配置沖突,無法上網;3.來訪用戶因不熟悉公司網絡情況無法上網; 以上這些情況都是日常最…

LabVIEW多按鍵自動化檢測系統

LabVIEW開發一套高精度按鍵力與行程自動化檢測系統,針對傳統檢測設備自動化程度低、定位誤差大等痛點,實現多按鍵產品的全流程自動化測試。系統集成 6 軸工業機器人、高精度傳感器及實時數據處理模塊,滿足汽車電子、消費電子等領域對按鍵手感…

嵌入式硬件篇---蜂鳴器

蜂鳴器是一種常用的電子發聲元件,主要分為有源蜂鳴器和無源蜂鳴器兩類。它們在結構、工作原理、驅動方式、應用場景等方面存在顯著差異。以下是詳細介紹: 一、核心定義與結構差異 1. 有源蜂鳴器 定義: “有源” 指內部自帶振蕩電路&#x…

600+純CSS加載動畫一鍵獲取指南

CSS-Loaders.com 完整使用指南:600純CSS加載動畫庫 🎯 什么是 CSS-Loaders.com? CSS-Loaders.com 是一個專門提供純CSS加載動畫的資源網站,擁有超過600個精美的單元素加載器。這個網站的最大特色是所有動畫都只需要一個HTML元素…

國內高頻混壓PCB廠家有哪些?

一、技術領先型廠商(聚焦材料與工藝突破) 獵板PCB 技術亮點:真空層壓工藝實現FR-4與羅杰斯高頻材料(RO4350B/RO3003)混壓,阻抗公差3%,支持64單元/板的5G天線模塊,插損降低15%。 應用…

volatile,synchronized,原子操作實現原理,緩存一致性協議

文章目錄 緩存一致性協議(MESI)volatile1. volatile 的作用2.volatile的底層實現3,volatile 實現單例模式的雙重鎖(面手寫) synchronized1,基本用法2,可重入性3,Java對象頭4,實現原理(1)代碼塊同步的實現&a…

webfuture:如何屏蔽后臺發文界面的保存為新文章按鈕?

問題描述: 如何屏蔽后臺發文界面的保存為新文章按鈕? 問題解決:修改這個文件 /Admin/Content/Base/css/base.css 定義這個的id saveAsNewItemSubmit #saveAsNewItemSubmit{display: none;}

SpringBoot集成第三方jar的完整指南

原文地址:https://blog.csdn.net/weixin_43826336/article/details/141640152?ops_request_misc%257B%2522request%255Fid%2522%253A%25227d4118ef2d572ba4428caf83f1d2bb28%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id7d4118…

題目 3293: 藍橋杯2024年第十五屆決賽真題-數位翻轉

題目 3293: 藍橋杯2024年第十五屆決賽真題-數位翻轉 時間限制: 2s 內存限制: 192MB 提交: 1046 解決: 318 題目描述 小明創造了一個函數 f(x) 用來翻轉 x 的二進制的數位(無前導 0)。比如f(11) 13,因為 11 (1011)2,將其左右翻轉…

word為跨頁表格新加表頭和表名

問題: 當表格過長需要跨頁時(如下圖所示),某些格式要求需要轉頁接排加續表。 方法一: 1、選中表格,在“表布局”區域點開“自動調整”,選擇“固定列寬”(防止后續拆分表格后表格變…

Ubuntu上進行VS Code的配置

1. 安裝VS code sudo snap install code --classic 2. 安裝GCC sudo apt install build-essential 3. 安裝VS Code中文包 打開 VS Code 點擊左側活動欄中的擴展圖標(或按Ctrl+Shift+X) 在搜索框中輸入:Chinese (Simplified) 選擇由 Microsoft 提供的 中文(簡體)語言包…

vr中風--數據處理模型搭建與訓練2

位置http://localhost:8888/notebooks/Untitled1-Copy1.ipynb # -*- coding: utf-8 -*- """ MUSED-I康復評估系統(增強版) 包含:多通道sEMG數據增強、混合模型架構、標準化處理 """ import numpy as np impor…