您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“SpringCloud前后端分離后引起跨域訪問的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SpringCloud前后端分離后引起跨域訪問的示例分析”這篇文章吧。
Spring Cloud 微服務試點改造,目前在嘗試前后端分離。
前臺A應用(本機8080端口),通過網管(本機8769端口)調用后臺應用B(本機8082端口)、應用C發布的http服務。
A的js代碼如下:
運行后報錯:
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應用,導致了跨域。
跨域訪問違反了同源策略,同源策略規定:瀏覽器的ajax只能訪問跟它的前臺頁面同源(相同域名或IP)的資源。
也就是說,如果A的前臺訪問A的后臺,則不會跨域。。
解決方案
方案一:
在被調用的類或方法上增加@CrossOrigin注解來聲明自己支持跨域訪問
origins=*表示允許所有來源都支持,也可以定義特定的來源,比如http://domain1.com
allowCredentials=true 表示response里會增加標示Access-Control-Allow-Credentials=true
如果只是針對某個服務需要被跨域訪問,用此方案可行。
但由于我們進行了前后端分離,前臺調用的都是跨域的服務,此方案需要對幾乎所有的B、C應用的服務對應的方法或者類上增加注解,不太合適。
而且,如果B、C服務都開放了跨域訪問,則可能存在安全隱患,因為其他未知應用也可以訪問這些服務。。
方案二:
在網管zuul里增加CorsFilter過濾器,比如下圖直接在啟動類里增加紅色部分代碼。
由于此方案是增加到網管上的,對B、C應用的代碼都無任何改造。
且因為B、C未直接開放跨域訪問,所以其他應用無法跨越訪問B、C服務,比如A不經過網關直接訪問B、C應用會訪問失敗。
后續會對網管應用裝配上SSO進行單點登錄校驗,來更好的保障服務安全。
以上是“SpringCloud前后端分離后引起跨域訪問的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。