跨源資源共享(cross-origin resource sharing, cors)是由大多數瀏覽器實現的w3c規範,它允許您以靈活的方式指定哪種跨域請求被授權,而不是使用一些不太安全、功能不太強大的方法,比如iframe或jsonp。
參考之前的文章:通訊—跨域資源共享
從4.2開始,spring mvc已支援cors。
在spring boot中使用帶有@crossorigin注釋的controller方法cors配置,不需要任何特定的配置。
@crossorigin註解可以在類上使用,也可以在方法上使用,如:
@crossorigin(origins = "", maxage = 3600)@restcontroller
public
class
accountcontroller
public
void
remove(@pathvariable long id)
}
常用的屬性有2個,分別是origins和maxage,下面分別解釋下:
@restcontrollerpublic
class
accountcontroller
public
void
remove(@pathvariable long id)
}
@crossorigin(maxage = 3600)@restcontroller
public
class
accountcontroller
public
void
remove(@pathvariable long id)
}
remove方法可以被所有**的訪問,retrieve方法只接受**傳送的請求。
@configurationpublic
class webmvcconfig extends
webmvcconfigureradapter
}
另外,還可以通過新增 filter 的方式,配置 cors 規則,並手動指定對哪些介面有效。
@beanpublic
filterregistrationbean corsfilter()
無論是通過哪種方式配置cors
,其實都是在構造corsconfiguration
。 乙個cors
配置用乙個corsconfiguration
類來表示,它的定義如下:
publicclass
corsconfiguration
spring
中對cors
規則的校驗,都是通過委託給defaultcorsprocessor
實現的。
defaultcorsprocessor
處理過程如下:
判斷依據是header
中是否包含origin
。如果包含則說明為cors
請求,轉到 2;否則,說明不是cors
請求,不作任何處理。
判斷response
的header
是否已經包含access-control-allow-origin
,如果包含,證明已經被處理過了, 轉到 3,否則不再處理。
判斷是否同源,如果是則轉交給負責該請求的類處理
是否配置了cors
規則,如果沒有配置,且是預檢請求,則拒絕該請求,如果沒有配置,且不是預檢請求,則交給負責該請求的類處理。如果配置了,則對該請求進行校驗。
校驗就是根據corsconfiguration
這個類的配置進行判斷:
判斷origin
是否合法
判斷method
是否合法
判斷header
是否合法
如果全部合法,則在response header
中新增響應的字段,並交給負責該請求的類處理,如果不合法,則拒絕該請求。
參考:springboot cors 跨域 @crossorigin
springboot配置cors解決跨域請求問題
springboot跨域配置
1.springboot它的好處就是它強大的自動配置,使我們能夠快速的搭建乙個專案。而springboot主要的設計目的是為微服務而誕生的。在前後端分離架構中,前端請求後端介面必然存在跨域,後端只需要提供服務即可。2.springboot配置跨域 編寫cors配置類 import org.sprin...
SpringBoot配置跨域
springboot vue模式 前端傳送請求到後端,header中的token資訊一直是丟失狀態 當時的後端設定模式如下 configuration enablewebmvc public class springmvcconfig implements webmvcconfigurer para...
spring boot 配置允許跨域
簡單概述什麼是跨域 跨域是指乙個域下的文件或指令碼試圖去請求另乙個域下的資源,這裡跨域是廣義的。其實我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的一類請求場景。瀏覽器從乙個網域名稱的網頁去請求另乙個網域名稱的資源時,網域名稱 埠 協議任一不同,都是跨域。跨域的訪問會帶來許多安全性的問題,比如,...