Java中解決跨域的幾種方法

一、 什么是跨域(同源策略)

同源的定義:如果兩個頁面的協議,端口(如果有指定)和主機都相同,則兩個頁面具有相同的源
1,用戶在瀏覽器輸入的URL中包含的協議、域名、端口都完全相同。如果有一項不同,瀏覽器會覺得有安全問題,從而產生跨域問題。,

2,如果使用Postman等開發工具進行交互是不會出現跨域問題,這是瀏覽器特有的限制。
在后端服務添加CORS策略的配置就可以解決跨域問題。

一,Spring Cloud Gateway 跨域配置?

spring: cloud:gateway:globalcors:cors-configurations:'[/**]':  # 允許跨域的源(網站域名/ip),設置*為全部allow-credentials: trueallowed-origins: #起源- "http://xb.abc.com"- "http://sf.xx.com"allowed-headers: "*"  # 允許跨域請求里的head字段,設置*為全部allowed-methods:  # 允許跨域的method, 默認為GET和OPTIONS,設置*為全部- OPTIONS- GET- POST- DELETE- PUT- PATCHmax-age: 3600

二,Spring boot項目

1,使用@CrossOrigin注解 (局部跨域)

在支持跨域的方法或類上添加@CrossOrigin注解

@CrossOrigin(origins = "*")

2,重寫 WebMvcConfigurer(全局跨域)

?Spring boot項目更便捷的方式,實現WebMvcConfigurer接口中的addCorsMappings方法。

 
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")//放行哪些原始域.allowedOrigins("*").allowedHeaders("*")// 是否發送Cookie.allowCredentials(true).allowedMethods("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH").maxAge(3600);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}

三,反向代理服務器

使用反向代理服務器可以將前端請求轉發到后端服務器,從而繞過跨域限制。以下是反向代理服務器的示例代碼:
這里nginx是要和你的前端服務在一臺服務器上的,然后你訪問的時候通過前端的nginx進行轉發的后端服務器才行?

 NGINX反向代理配置示例
location /api {proxy_pass http://backend-server;
}

?四,Spring解決跨越

添加處理跨域的過濾器(CoreFilter)。

@Configuration
public class GlobalCorsConfig {@Beanpublic CorsFilter corsFilter(){CorsConfiguration config=new CorsConfiguration();//config.addAllowedOrigin("*"); -過時的//允許哪些域名訪問config.addAllowedOriginPattern("*");//是否允許前端傳遞驗證信息   cookieconfig.setAllowCredentials(true);//允許所有的方法  POST GET ...config.addAllowedMethod("*");//允許哪些請求頭config.addAllowedHeader("*");//暴露哪些頭部信息config.addExposedHeader("*");//設置允許哪些接口可以被跨域訪問UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**",config);return new CorsFilter(source);}
}

?

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

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

相關文章

【python005】python批量、動態調參請求接口(已更新)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題。隨著版本更新,做了一些變動,如商業化限制,取消一些語法等。 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來! 文章目錄 1.背景介紹2.單次接口請求總結代碼片3.批量循環接口請求總結代碼片4.持久化`…

機器人流程自動化與低代碼流程自動化:技術革新的雙重驅動

在數字化時代的浪潮中,企業對于高效、智能的工作流程的需求日益增強。在這一背景下,機器人流程自動化(RPA)和低代碼流程自動化(Low-Code Automation)應運而生,成為推動企業數字化轉型的重要力量…

docker容器安裝mysql

linux: centOS-7 hadoop: 3.3.6 前置章節: (圖文并茂)基于CentOS-7搭建hadoop3.3.6大數據集群-CSDN博客 可選:zookeeper安裝教程-CSDN博客 1.安裝docker 1.1 添加docker的repo源 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/…

一個月速刷leetcodeHOT100 day08 兩道DP題 一道子串

和為k的子數組 中等 提示 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 示例 1: **輸入:**nums [1,1,1], k 2 **輸出:**2 示例 2: *…

集合、Collection接口特點和常用方法

1、集合介紹 對于保存多個數據使用的是數組,那么數組有不足的地方。比如, 長度開始時必須指定,而且一旦制定,不能更改。 保存的必須為同一類型的元素。 使用數組進行增加/刪除元素的示意代碼,也就是比較麻煩。 為…

一種簡單實用的ollvm反混淆的方案與源碼

我是一名從事反欺詐&風控&設備指紋相關的工作,最近對ollvm的如何逆向的問題進行了學習與思考。 ollvm是一個開源免費的so混淆工具,對于逆向的小白來說簡直是災難性的存在。 這個例子是超簡單,我想每個人都可以學會跟掌握,…

RustGUI學習(iced/iced_aw)之擴展小部件(二十五):如何使用tab部件來創建tab多頁面切換?

前言 本專欄是學習Rust的GUI庫iced的合集,將介紹iced涉及的各個小部件分別介紹,最后會匯總為一個總的程序。 iced是RustGUI中比較強大的一個,目前處于發展中(即版本可能會改變),本專欄基于版本0.12.1. 概述 這是本專欄的第二十五篇,主要講述tab頁面切換部件的使用,會結…

[linux] bash中的單引號(‘)和雙引號(“)

在命令行中,單引號()和雙引號(")在某些情況下會有不同的效果,尤其是在涉及bash變量和特殊字符的解析時。在你給出的兩個命令中: ps -ef|grep "tokenize"|grep -v grep|awk {print $2} 和 ps -ef|grep "tokenize"…

PCL點云邊界提取——源碼解析

文章目錄 一、概述二、PCL邊緣檢測源碼定位過程1、初始化2、檢查輸入點云是否稠密3、迭代處理每個點4、輸出三、修改后的過程調用一、概述 在PCL中集成了一個非常經典的點云邊緣檢測算法,這個算法也在 PCL點云邊界提取這篇博客中講解了。該文章只介紹了AC算法的原理及接口調用…

hook中useContext到底怎么用

語法: somecontext createContext(defaultValue); 作用: 避免了組件嵌套太深, 頂層變量層層傳遞的麻煩. 如何消費頂層數據 第一步: 用createContext聲明一個context上下文變量 import { createContext } from react;export const GlobalContext createContext({} as any);…

面試問題小結

說說你的項目,從里面學到啥了(隨便說) CAS 線程池 的各個方面 線程咋創建(4種方式) 說一下聚集索引和非聚集索引 50w男 50w女 ,在B樹中咋存儲的(類似下面的圖,變通一下就行了&a…

本是夢中人,常作花下客。心中自往來,知我有幾個。

我們總是喜歡拿“順其自然”來敷衍人生道路上的荊棘坎坷,卻很少承認,真正的順其自然, 其實是竭盡所能之后的不強求, 而非兩手一攤的不作為。 一花凋零荒蕪不了整個春天, 一次挫折也荒廢不了整個人生。 多年后&#x…

近臨算法(個人總結版)

背景 近鄰算法(Nearest Neighbor Algorithm)是一種基本但非常有效的分類和回歸方法。最早由Fix和Hodges在1951年提出,經過幾十年的發展和改進,已成為數據挖掘、模式識別和機器學習領域的重要工具。近鄰算法基于相似性原則&#x…

通過el-tree自定義渲染網頁版工作目錄,實現鼠標懸浮顯示完整名稱、用icon區分文件和文件夾等需求

目錄 一、通過el-tree自定義渲染網頁版工作目錄 1.1、需求介紹 1.2、使用el-tree生成文檔目錄 1.2.1、官方基礎用法 ①效果 ②代碼: 1.2.2、自定義文檔目錄(實現鼠標懸浮顯示完整名稱、用icon區分文件和文件夾) ①效果(直接效…

find 幾招在 Linux 中高效地查找目錄

1. 介紹 在 Linux 操作系統中,查找目錄是一項常見的任務。無論是系統管理員還是普通用戶,都可能需要查找特定的目錄以執行各種操作,如導航文件系統、備份數據、刪除文件等。Linux 提供了多種命令和工具來幫助我們在文件系統中快速找到目標目…

淺談后端整合Springboot框架后操作基礎配置

boot基礎配置 現在不訪問端口8080 可以嗎 我們在默認啟動的時候訪問的是端口號8080 基于屬性配置的 現在boot整合導致Tomcat服務器的配置文件沒了 我們怎么去修改Tomcat服務器的配置信息呢 配置文件中的配置信息是很多很多的... 復制工程 保留工程的基礎結構 抹掉原始…

樸素貝葉斯+SMSSpamCollections

1. 打開 Jupyter 后,在工作目錄中,新建一個文件夾命名為 Test01 ,并且在文件夾中導入數據 集。在網頁端界面點擊 “upload” 按鈕,在彈出的界面中選擇要導入的數據集。然后數據集出現 在 jupyter 文件目錄中,此時…

Vue.js Promise 與 async/await 的比較

在現代 Web 開發中,異步操作是不可避免的。在處理異步數據獲取時,開發人員通常會使用 Promise 或 async/await。雖然兩者都可以實現相同的功能,但它們在代碼風格、可讀性和錯誤處理等方面有所不同。本文將對這兩種方法進行比較,并…

初識Qt:從Hello world到對象樹的深度解析

Qt中的對象樹深度解析 Hello world1.圖形化界面創建命令行式創建在棧上創建在堆上創建為什么傳文本需要QString,std::string不行嗎?那為什么要傳入this指針?為什么new后不用顯示調用delete函數呢,不會造成內存泄漏問題嗎&#xff…

python:__class_getitem__使用以及cached_property源碼分析

python:__class_getitem__使用以及cached_property源碼分析 1 前言 Python中如何模擬泛型類型? 當使用類型標注時,使用 Python 的方括號標記來形參化一個 generic type 往往會很有用處。 例如,list[int] 這樣的標注可以被用來表…