CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個(gè)W3C標(biāo)準(zhǔn)接剩,它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請(qǐng)求,打破了Ajax只能訪問本站內(nèi)的資源限制杠袱,CORS在很多地方都有被使用辐怕,微信支付的JS支付就是通過JS向微信服務(wù)器發(fā)送跨域請(qǐng)求。開放Ajax訪問可被跨域訪問的服務(wù)器大大減少了后臺(tái)開發(fā)的工作澈蝙,前后臺(tái)工作也可以得到很好的明確以及分工吓坚,下面我們就看講一下如何讓你的SpringBoot項(xiàng)目支持CORS跨域。
免費(fèi)專題文章匯總
恒宇少年在博客整理出來了SpringBoot灯荧、ApiBoot礁击、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】,【SpringCloud基礎(chǔ)教程專題】逗载,【ApiBoot組件使用專題】
本章目標(biāo)
基于SpringBooot項(xiàng)目搭建可以站外Ajax請(qǐng)求訪問的跨域資源服務(wù)器哆窿。
構(gòu)建項(xiàng)目
使用IDEA開發(fā)工具創(chuàng)建一個(gè)SpringBoot項(xiàng)目,預(yù)先添加Web依賴即可厉斟,項(xiàng)目結(jié)構(gòu)如下圖1所示:
CORSConfiguration
我們只需要添加項(xiàng)目Web依賴就可以了挚躯,下面我們開始添加CORS的配置信息,我們創(chuàng)建一個(gè)CORSConfiguration配置類擦秽,如下圖2所示:
上圖2內(nèi)我們的CORSConfiguration配置類繼承了WebMvcConfiugrationAdaper父類并且重寫了addCorsMappings方法码荔,我們來簡(jiǎn)單介紹下我們的配置信息
addMapping:配置可以被跨域的路徑,可以任意配置感挥,可以具體到直接請(qǐng)求路徑缩搅。
allowedMethods:允許所有的請(qǐng)求方法訪問該跨域資源服務(wù)器,如:POST触幼、GET硼瓣、PUT、DELETE等域蜗。
allowedOrigins:允許所有的請(qǐng)求域名訪問我們的跨域資源巨双,可以固定單條或者多條內(nèi)容,如:"http://www.baidu.com"霉祸,只有百度可以訪問我們的跨域資源筑累。
allowedHeaders:允許所有的請(qǐng)求header訪問,可以自定義設(shè)置任意請(qǐng)求頭信息丝蹭,如:"X-YAUTH-TOKEN"
編寫跨域資源請(qǐng)求
我們的跨域配置到目前來說已經(jīng)配置完成了慢宗,SpringBoot已經(jīng)為我們內(nèi)置相關(guān)配置,我們只需要重寫方法修改部分參數(shù)即可,下面我們來創(chuàng)建一個(gè)測(cè)試跨域資源的控制器镜沽,如下圖3所示:
在圖3內(nèi)的IndexController控制器內(nèi)敏晤,我們僅僅添加了一個(gè)測(cè)試返回文本的內(nèi)容,當(dāng)然這個(gè)控制器可以處理任意業(yè)務(wù)邏輯缅茉。
測(cè)試跨域請(qǐng)求
我們?cè)陧?xiàng)目外創(chuàng)建一個(gè)index.html頁(yè)面(上傳碼云后會(huì)在resources目錄找到)嘴脾,頁(yè)面內(nèi)添加部分jquery代碼,如下圖4所示:
我們引用了在線的jquery代碼蔬墩,并且在頁(yè)面加載的時(shí)候?yàn)閕d=cors的輸入按鈕綁定點(diǎn)擊事件译打,點(diǎn)擊按鈕時(shí)就會(huì)請(qǐng)求我們的/cors跨域資源路徑,下面我們來運(yùn)行項(xiàng)目測(cè)試下跨域請(qǐng)求拇颅,項(xiàng)目運(yùn)行日志如下圖5所示:
可以看到上圖5內(nèi)項(xiàng)目啟動(dòng)時(shí)SpringBoot內(nèi)置的SpringMVC已經(jīng)把我們的/cors添加到映射集合奏司,我們打開之前編寫的index.html網(wǎng)頁(yè),界面效果如下圖6所示:
接下來我們點(diǎn)擊“CORS跨域測(cè)試”按鈕樟插,查看下效果韵洋,如下圖7所示:
上圖7內(nèi)可以看到,界面給我返回了我們/cors路徑返回的文本內(nèi)容黄锤,證明我們的ajax請(qǐng)求完美的通過跨域資源庫(kù)訪問了開放跨域的資源路徑搪缨。
下面我們來把我們的跨域配置注釋掉,重啟項(xiàng)目后刷新index.html再次點(diǎn)擊“CORS跨域測(cè)試”按鈕鸵熟,界面輸出效果如下圖8所示:
可以看到我們點(diǎn)擊后并沒有獲取到返回內(nèi)容勉吻,而是給我們提示了異常,告訴我們無法加載資源旅赢。
本章總結(jié)
本章簡(jiǎn)單講解了SpringBoot項(xiàng)目對(duì)CORS請(qǐng)求的處理,完全自定義處理請(qǐng)求路徑惑惶,可對(duì)請(qǐng)求頭信息以及請(qǐng)求的域名進(jìn)行控制煮盼。