【微服務】144:跨域問題及其解決方法

今天是劉小愛自學Java的第144天。前端

感謝你的觀看,謝謝你。vue

學習計劃安排以下:nginx

  • 關於昨天編寫的商品分類業務,訪問方式的回顧以及補充,發如今管理系統中訪問會報錯。
  • 瀏覽器直接訪問沒事,可是在管理系統中訪問會報錯,從而引出跨域問題。
  • 使用CORS解決跨域問題,經過其解決流程回顧兩個很是重要的知識點。
  • jdk8的新特性方法引用、以及SpringBoot中的Java配置類的回顧。

1、跨域問題的引出

對昨天商品分類業務回顧及補充:web

昨天說明了第①種和第②種訪問方式。ajax

在後臺服務器中編寫代碼接受對應的請求,從數據庫中查詢到對應數據並響應。數據庫

①直接訪問天然是沒問題的。跨域

②經過網關,其至關於在直接訪問的路徑上作了一個保護,最終仍是會跳轉該路徑。瀏覽器

其實第③種方式直接使用網關域名訪問也是能夠的,在前天使用nginx時配置了網關域名。安全

以上三種方式都沒問題,證實代碼自己編寫的沒有問題,可是在管理系統中發送請求時會發現瀏覽器會報錯。服務器

在前端頁面中,點擊分類管理,咱們經過瀏覽器F12能夠查看其發送的請求路徑。

該路徑和第③種訪問方式是同樣的。

爲何本身在瀏覽器中輸入該路徑能訪問,可是在管理系統中發送請求會失敗呢?

這就涉及到了一個跨域問題。

那到底什麼是跨域?

跨域是指跨域名的訪問,有三種狀況:

  • 域名不一樣的跨域。
  • 域名相同、端口不一樣的跨域。
  • 二級域名不一樣的跨域。

而咱們剛纔瀏覽器爲什麼報錯?就是由於二級域名變了,從而致使了跨域。

注意:關於域名、二級域名的概念我不能在文章中舉例說明,前天就是文章中出現域名而被舉報了,上圖簡單說明下,也很好理解。

那爲何有跨域問題?

假設我有一個網站,另外一我的看我不爽,每天經過不一樣的渠道瘋狂攻擊個人網站。

若是沒有跨域問題,他就能夠經過跨域不斷地對個人網站發送ajax請求從而攻擊。

因此跨域問題本質上是瀏覽器對於ajax請求的一種安全限制,這自己並非壞事,更安全。

2、如何解決跨域?

跨域問題既然是爲了阻止跨站攻擊,那要解決這個問題又該怎麼辦呢?

其實很簡單,哪一個域名要訪問我?我贊成就行了,就跟咱們設置白名單同樣的道理。

咱們使用的是經過cors方式去解決跨域問題,關於cors,不用過於去深究,對其實現思路有一個清晰的認識便可。

1網關編寫配置信息

如今是後臺管理系統對應的域名要訪問網關對應的域名,因此在網關微服務配置就行了。

不要看這個配置信息好像有點複雜,但其實明白屬性的意思也就好理解:

  • allowedOrigins:設置能跨域訪問個人域名,其中*號表明任意域名。
  • allowCredentials:是否容許攜帶cookie?默認狀況下值爲false。
  • allowMethod:接受的請求方式。
  • maxAge:本次許可的有效時長,單位是秒。
  • allowHeaders:請求頭信息。
  • path:「/**」表示的是攔截對應域名下的全部請求,也能夠自行設置請求路徑。

核心關鍵是第1個屬性,也就是白名單。

注意:這裏使用的是SpringBoot中的Java配置,老實說過久沒用有點忘了。

在我第131天的學習筆記中有詳細說明,作了一個回顧也就想起來了。

2編寫CORS配置類

注意其參數也就是咱們剛編寫的Java配置類。

①添加配置信息

方法引用的使用,我以其中一個例子說明:

config要經過addAllowedMethod()方法添加容許的請求方式。

可是在配置信息中請求方式有好幾個,先獲取allowMethod屬性,結果是一個集合。

因此要將該集合遍歷,再將遍歷後的數據一個一個地添加到config中。

這樣操做下來就非常麻煩,而使用方法引用一行代碼就搞定了,其做用是同樣的。

注意:關於方法引用,第50和51天的學習筆記中有詳細說明,作了一回顧也就想起來了。

②添加映射路徑

這裏就至關於設置了一個白名單,這個域名能夠訪問我,可是我也能夠指定其路徑。

也就是說你這個域名雖然能夠訪問我,可是你的每一個請求我並不必定都會接受。

固然例子中設置的是/**,表示全部請求。

3、測試

cors配置好後,就能解決跨域問題了:

經過測試結果咱們能夠發現:

在後臺管理系統對應的前端頁面,能夠訪問另外一個域名,從而解決了跨域問題。

瀏覽器上也沒報錯,頁面也有了數據。

這些數據也就是最早開始訪問服務器獲得的數據,只不過被渲染到對應的vue組件中了。

最後

行爲不得反求諸己,你們好,我是@劉小愛。

一個白天上班晚上學習的95後滬漂,不爲其它,只爲學會自律作好本身,也願個人每日打卡能給你帶來勇氣,歡迎點贊關注和評論。

本文分享自微信公衆號 - 劉小愛(liuxiaoai946)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索