SpringBoot前后端分離解決跨域問題的三種解決方案

🚀🚀扎哇太棗糕的博客首頁🚀🚀**
在這里插入圖片描述

文章目錄

  • 🍊什么是跨域
  • 🍊跨域問題的解決策略
  • 🍊三種解決方法


🍊什么是跨域

??想要知道什么是跨域的話,我們可以通過一個小案例簡單了解一下跨域的概念:在項目代碼編寫的時候,我們將前端項目代碼和后端的項目代碼相分離開,一個運行在本地的8080端口一個運行在本地的8888端口,這也就是我們常說的前后端分離項目。現在使用前端的請求去調用后端的接口,就會產生以下的錯誤

Access to XMLHttpRequest at 'http://localhost:8888/請求名' 
from origin ‘http://localhost:8080’ has been blocked by 
CORS policy: No ‘Access-Control-Allow-Origin’ 
header is present on the request resource.

??錯誤原因:基于瀏覽器的保護機制,當請求中缺少了一些http頭信息時,讀取響應的操作就會被阻止。出現這個問題并不是說后端沒有接收到前端發送過來的請求,相反后端接收請求并且將響應信息返回給了前端,但是返回的響應信息被前端瀏覽器所攔截了。
??這個保護機制就是瀏覽器的一種重要的安全策略——同源策略,該策略可以限制不同源之間的交互行為,從而有效避免一些瀏覽器層面的攻擊。所謂的同源就是指url中的協議、域名、端口三個都相同。反觀案例的url前端http://localhost:8080請求http://localhost:8888/請求名,協議和域名都相等但是端口卻不一樣導致兩個是不同源,不同源的話就會產生跨域問題。

🍊跨域問題的解決策略

??CROS(Cross Origin Resource Sharing)策略,全稱為跨域資源共享策略,是后端用來解決跨域問題的一個方案(當然前端也有解決跨域問題的對應方案),拋開底層具體的解決原理不說,今天就學習一下如何借助該策略實現跨域問題的解決。

🍊三種解決方法

??第一種也是最簡單但不常用的一種,只需要在后端接口方法上添加 @CrossOrigin 注解,即可解決對這個接口方法的請求跨域問題,但是在實際開發中一般都會有很多的方法,在每一個方法上都添加這個注解的話明顯就會很影響使用感受。當然還可以將注解添加到類上,表示類中的所有方法都解決了跨域問題,但是類也不止一個還是麻煩。

@CrossOrigin
@GetMapping("/請求名")
public String sayHello() {return "hello world !";
}

第二種就是使用過濾器統一處理

// 對比著看,包千萬別導錯了
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();// 使用通配符* 允許所有的域請求corsConfiguration.addAllowedOrigin("*");// 使用通配符* 允許所有請求頭字段corsConfiguration.addAllowedHeader("*");// 使用通配符* 允許所有請求頭方法類型corsConfiguration.addAllowedMethod("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();// 處理請求映射source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);}
}

第三種就是使用WebMvc的配置類

// 對比著看,包千萬別導錯了
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")      // 設置映射.allowedOriginPatterns("*")        // 設置域.allowedMethods("*")               // 設置請求的方式GET、POST等.allowCredentials(true)            // 設置是否攜帶cookie.maxAge(3600)                      // 設置設置的有效期 秒單位.allowedHeaders("*");              // 設置頭}
}

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

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

相關文章

ant design vue 樹形控件_官宣!vue.ant.design 低調上線

點擊右上方,關注開源中國OSC頭條號,獲取最新技術資訊官宣!官宣!官宣!是的,你沒看錯就是那個 https://vue.ant.design。至此,Ant Design 已經全面覆蓋了 React、Angular、Vue 三大前端框架&#…

哪款筆記本電腦好_掃地機器人哪個牌子好?口碑最好的掃地機器人

隨著智能家居的普及,讓我們的生活變得越來越智能。掃地機器人的出現完美解決了寵物的毛發問題,為自己騰出了大量的時間。掃地機器人絕對能提升你的生活品質,通過機器內建的智能清潔模式、自定義規劃區域進行打掃,使用手機APP進行控…

使用mybatisplus的通用枚舉實現存儲顯示相分離

狡兔尚且三窟,多學一招總沒錯吧? 🚀🚀扎哇太棗糕的博客首頁🚀🚀 🌏 拋出問題 如果讓你實現這么一個功能:將性別使用數字存儲到數據庫中,但是前端需要獲取到的是具體的性…

wifi卡慢延遲高_家里WiFi特別卡,網絡延遲高,可能不是網速的問題

原標題:家里WiFi特別卡,網絡延遲高,可能不是網速的問題隨著科技走向我們的身邊,網絡的覆蓋力度也是越來越大,相信很多人的家中都是有安裝WiFi的,然后往往在家中使用的過程中都會碰到這樣的情況,…

voc2007數據集_【目標檢測數據集】PASCAL VOC制作

【VOC20072012】數據集地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/PASCAL VOC為圖像識別和分類提供了一整套標準化的優秀的數據集,用于構建和評估用于圖像分類(Classification),檢測(O…

JDK和JRE的區別?main方法的注意點?強制和自動類型轉換?

💡涉及的知識點速通🛫 JDK和JRE傻傻分不清?🛫 HelloWorld的輸出都經歷了啥?🛫 Java的三個版本都是啥?🛫 關于main方法你都知道啥?🛫 強制and自動類型轉換都是啥?各位小…

java將date類型轉成yyyymmdd_java中的Date怎么轉換成YYYYMMDD形式?

展開全部SimpleDateFormat inSdf new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);創建SimpleDateFormat對象的時候使用帶Locale的構e69da5e6ba9062616964757a686964616f31333365633938造參數因為你的星期和月份是用E文寫的 所以parse回來的時候自…

安卓10不支持qmc解碼_Root神器支持安卓10 面具Magisk v20.4+Magisk Manager v7.5.1

Magisk的功能和xposed框架的功能差不多,也有很多插件可安裝,而且自帶root,刷入這個Magisk后你的rom同時也就有root了(支持安卓7.0,7.1,8.0,8.1,9,10)這也是目前安裝8.1root的普遍方法,因為目前s…

centos7配置br0_Docker CentOS7 修改網絡配置與宿主機橋接

Docker CentOS7 修改網絡配置與宿主機橋接1、創建橋接物理網絡(1)新建br0橋接網絡,brctl show可以查看(需安裝bridge-utils)(2)將宿主機物理網卡IP、掩碼、網關、dns(或者dhcp)配置到br0上(3)刪除宿主機物理網卡IP、掩碼、網關、dns(或者dhcp)配置(4)將宿主機物理網…

==和equals判等、空串和null串、字符串常用API

💡涉及的知識點速通🛫 關于變量和常量你都知道啥?🛫 &和&&、|和||有什么區別?🛫 關于字符串的問題你能答對幾道?🪂 可以修改一個字符串中的值嗎?🪂 字符串使用…

倆臺電腦怎么設置同一局域網_方法 | 把手機上的照片傳到電腦上

我想把手機上的照片/視頻傳到電腦上怎么辦? 什么云盤,手機助手等等全扔到一邊去,不用。請讓我慢慢道來:現在,人們手機用的越來越多,即使在大街上,到處都是“低頭族”。但是,有好多小伙伴問&…

數據持化技術的發展演變(SQL、JDBC、mybatis)

文章目錄1 簡單SQL語句1.1 查詢1.2 新增1.3 修改1.4 刪除1.5 多表查詢2 JDBC2.1 什么是JDBC2.2 什么是jar和maven2.3 JDBC的使用2.4 JDBC總結3 mybatis3.1 什么是ORM?為什么是ORM不是JDBC?3.2 mybatis的使用3.3 mybatis總結4 mybatis與jdbc的邏輯相同處環境配置 j…

傳統蒙文字體_蒙古要改回使用傳統回鶻蒙文,這是種什么文字,蒙古為什么要改回...

喜歡就點關注吧!文字是一個國家的文化象征,也是其書面交流的主要工具,世界上的大多數國家都有自己獨特的文字,我們的鄰國蒙古也是如此,近日蒙古國實行了一場意義重大的文字改革,據新華社烏蘭巴托3月18日報道&#xff0…

三態輸出門實驗報告注意事項_數電基礎知識:各種IO輸出的類型

集電極開路(OC)集電極開路輸出的結構如圖1所示,右邊的那個三極管集電極什么都不接,所以叫做集電極開路;左邊的三極管為反相之用,使輸入為“0”時,輸出也為“0”。對于圖 1,當左端的輸入為“0”時&#xff0…

數據持久化技術——MP

文章目錄1 環境搭建1.1 創建一個maven的project1.2 pom.xml文件導入web開發依賴1.3 創建SpringBoot項目的主程序入口2 代碼生成器3 配置數據庫4 導入前端頁面5 開始前端控制器的編碼5.1 wrapper構造器mybatis-plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基…

win7無法連接打印機拒絕訪問_如何解決局域網無法訪問SQL Server 2008 無法連接到(local)...

初次安裝使用SQL server 2008時,可能會遇到無法連接到(local)的情況。那么,如何解決此問題?工具/原料: SQL server 2008方法/步驟1. 打開SQL server 配置管理器-->SQL server 網絡配置-->實例名的協議(我的實例名為SQLEXPRESS)。2. 將S…

windows進程管理器_任務管理器就能搞定9成的電腦問題?方法在這里!

90% 對于電腦的不滿,都逃不出這幾個方面:電腦狀態無法隨時監測、運行卡頓、開機時間長、莫名黑屏、電池關鍵時刻不扛使(筆記本電池怎么保養?能不能一直插電源充電?可以戳這里→),很多小伙伴就選擇安裝第三方軟件來解決…

三維網格精簡算法java版_ISMAR 2020 | 商湯提出手機端實時單目三維重建系統

導讀:商湯研究院和浙江大學CAD&CG國家重點實驗室合作研發了一個手機端實時單目三維重建系統Mobile3DRecon。與現有的基于RGBD的在線三維重建或離線生成表面網格的系統不同,該系統結合前端位姿跟蹤結果,允許用戶使用單目攝像頭在線重建場景…

【分類匯總】idea快捷鍵、idea配置、常用插件

寫在前面 千萬別看目錄很長就感覺本篇博客很絮叨繁瑣,里面多是配置的講解貼了很多的圖片方便大家了解,配置成功一次之后就可以一直使用了。 快捷鍵的使用建議大家先看,后續敲代碼的時候刻意的使用快捷鍵,相信經過兩三天的使用就可…

win10設置默認輸入法_個性化設置技巧

個性化設置技巧子墨居士前言本次內容主要是win10系統自帶的功能,不是用第三方軟件優化桌面的情況下,讓自己的電腦桌面能更美觀、更舒服。系統自身的個性化設置主要是下圖中的幾個。鼠標右擊->個性化設置。 第三方軟件的效果會更好,畢竟是專…