溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud前后端分離后引起跨域訪問的示例分析

發(fā)布時間:2021-10-15 14:10:09 來源:億速云 閱讀:177 作者:小新 欄目:web開發(fā)

這篇文章主要為大家展示了“SpringCloud前后端分離后引起跨域訪問的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SpringCloud前后端分離后引起跨域訪問的示例分析”這篇文章吧。

Spring Cloud 微服務試點改造,目前在嘗試前后端分離。

前臺A應用(本機8080端口),通過網管(本機8769端口)調用后臺應用B(本機8082端口)、應用C發(fā)布的http服務。

SpringCloud前后端分離后引起跨域訪問的示例分析SpringCloud前后端分離后引起跨域訪問的示例分析

A的js代碼如下:

SpringCloud前后端分離后引起跨域訪問的示例分析

運行后報錯:

XMLHttpRequest cannot load http://127.0.0.1:8769/service-B/getResInfo. No 'Access-Control-Allow-Origin' header is present on the requested resource.

Origin 'http://localhost:8080' is therefore not allowed access.

問題原因:A的前臺訪問B應用,導致了跨域。

跨域訪問違反了同源策略,同源策略規(guī)定:瀏覽器的ajax只能訪問跟它的前臺頁面同源(相同域名或IP)的資源。

也就是說,如果A的前臺訪問A的后臺,則不會跨域。。

解決方案

方案一:

在被調用的類或方法上增加@CrossOrigin注解來聲明自己支持跨域訪問

origins=*表示允許所有來源都支持,也可以定義特定的來源,比如http://domain1.com

allowCredentials=true 表示response里會增加標示Access-Control-Allow-Credentials=true

SpringCloud前后端分離后引起跨域訪問的示例分析

如果只是針對某個服務需要被跨域訪問,用此方案可行。

但由于我們進行了前后端分離,前臺調用的都是跨域的服務,此方案需要對幾乎所有的B、C應用的服務對應的方法或者類上增加注解,不太合適。

而且,如果B、C服務都開放了跨域訪問,則可能存在安全隱患,因為其他未知應用也可以訪問這些服務。。

方案二:

在網管zuul里增加CorsFilter過濾器,比如下圖直接在啟動類里增加紅色部分代碼。

SpringCloud前后端分離后引起跨域訪問的示例分析

由于此方案是增加到網管上的,對B、C應用的代碼都無任何改造。

且因為B、C未直接開放跨域訪問,所以其他應用無法跨越訪問B、C服務,比如A不經過網關直接訪問B、C應用會訪問失敗。

后續(xù)會對網管應用裝配上SSO進行單點登錄校驗,來更好的保障服務安全。

以上是“SpringCloud前后端分離后引起跨域訪問的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI