第二十五章:SpringBoot新增支援CORS跨域訪問

恆宇少年發表於2017-10-01

CORS(Cross-Origin Resource Sharing)”跨域資源共享”,是一個W3C標準,它允許瀏覽器向跨域伺服器傳送Ajax請求,打破了Ajax只能訪問本站內的資源限制,CORS在很多地方都有被使用,微信支付的JS支付就是通過JS向微信伺服器傳送跨域請求。開放Ajax訪問可被跨域訪問的伺服器大大減少了後臺開發的工作,前後臺工作也可以得到很好的明確以及分工,下面我們就看講一下如何讓你的SpringBoot專案支援CORS跨域。

本章目標

基於SpringBooot專案搭建可以站外Ajax請求訪問的跨域資源伺服器。

構建專案

使用IDEA開發工具建立一個SpringBoot專案,預先新增Web依賴即可,專案結構如下圖1所示:

圖1
CORSConfiguration

我們只需要新增專案Web依賴就可以了,下面我們開始新增CORS的配置資訊,我們建立一個CORSConfiguration配置類,如下圖2所示:

圖2
上圖2內我們的CORSConfiguration配置類繼承了WebMvcConfiugrationAdaper父類並且重寫了addCorsMappings方法,我們來簡單介紹下我們的配置資訊

addMapping:配置可以被跨域的路徑,可以任意配置,可以具體到直接請求路徑。
allowedMethods:允許所有的請求方法訪問該跨域資源伺服器,如:POST、GET、PUT、DELETE等。
allowedOrigins:允許所有的請求域名訪問我們的跨域資源,可以固定單條或者多條內容,如:”http://www.baidu.com”,只有百度可以訪問我們的跨域資源。
allowedHeaders:允許所有的請求header訪問,可以自定義設定任意請求頭資訊,如:”X-YAUTH-TOKEN”

編寫跨域資源請求

我們的跨域配置到目前來說已經配置完成了,SpringBoot已經為我們內建相關配置,我們只需要重寫方法修改部分引數即可,下面我們來建立一個測試跨域資源的控制器,如下圖3所示:

圖3
在圖3內的IndexController控制器內,我們僅僅新增了一個測試返回文字的內容,當然這個控制器可以處理任意業務邏輯。

測試跨域請求

我們在專案外建立一個index.html頁面(上傳碼雲後會在resources目錄找到),頁面內新增部分jquery程式碼,如下圖4所示:

圖4
我們引用了線上的jquery程式碼,並且在頁面載入的時候為id=cors的輸入按鈕繫結點選事件,點選按鈕時就會請求我們的/cors跨域資源路徑,下面我們來執行專案測試下跨域請求,專案執行日誌如下圖5所示:

圖5
可以看到上圖5內專案啟動時SpringBoot內建的SpringMVC已經把我們的/cors新增到對映集合,我們開啟之前編寫的index.html網頁,介面效果如下圖6所示:

圖6
接下來我們點選“CORS跨域測試”按鈕,檢視下效果,如下圖7所示:

圖7
上圖7內可以看到,介面給我返回了我們/cors路徑返回的文字內容,證明我們的ajax請求完美的通過跨域資源庫訪問了開放跨域的資源路徑。

下面我們來把我們的跨域配置註釋掉,重啟專案後重新整理index.html再次點選“CORS跨域測試”按鈕,介面輸出效果如下圖8所示:

圖8
可以看到我們點選後並沒有獲取到返回內容,而是給我們提示了異常,告訴我們無法載入資源。

本章總結

本章簡單講解了SpringBoot專案對CORS請求的處理,完全自定義處理請求路徑,可對請求頭資訊以及請求的域名進行控制。

本章程式碼已經上傳到碼雲:

網頁地址:git.oschina.net/jnyqy/lessons
Git地址:git.oschina.net/jnyqy/lessons.git

SpringBoot相關係列文章,請訪問:目錄:SpringBoot學習目錄,感謝閱讀!

歡迎加入QQ技術交流群,共同進步。

QQ技術交流群

相關文章