CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個W3C標準,它容許瀏覽器向跨域服務器發送Ajax請求,打破了Ajax只能訪問本站內的資源限制,CORS在不少地方都有被使用,微信支付的JS支付就是經過JS向微信服務器發送跨域請求。開放Ajax訪問可被跨域訪問的服務器大大減小了後臺開發的工做,先後臺工做也能夠獲得很好的明確以及分工,下面咱們就看講一下如何讓你的SpringBoot項目支持CORS跨域。html
本章目標jquery
基於SpringBooot項目搭建能夠站外Ajax請求訪問的跨域資源服務器。git
構建項目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"app
編寫跨域資源請求cors
咱們的跨域配置到目前來講已經配置完成了,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技術交流羣