Springboot配置跨域訪問

2022-06-23 22:09:10 字數 2244 閱讀 8686

跨源資源共享(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,下面分別解釋下:

@restcontroller

public

class

accountcontroller

public

void

remove(@pathvariable long id)

}

@crossorigin(maxage = 3600)

@restcontroller

public

class

accountcontroller

public

void

remove(@pathvariable long id)

}

remove方法可以被所有**的訪問,retrieve方法只接受**傳送的請求。

@configuration

public

class webmvcconfig extends

webmvcconfigureradapter

}

另外,還可以通過新增 filter 的方式,配置 cors 規則,並手動指定對哪些介面有效。

@bean

public

filterregistrationbean corsfilter()

無論是通過哪種方式配置cors,其實都是在構造corsconfiguration。 一個cors配置用一個corsconfiguration類來表示,它的定義如下:

public

class

corsconfiguration

spring中對cors規則的校驗,都是通過委託給defaultcorsprocessor實現的。

defaultcorsprocessor處理過程如下:

判斷依據是header中是否包含origin。如果包含則說明為cors請求,轉到 2;否則,說明不是cors請求,不作任何處理。

判斷responseheader是否已經包含access-control-allow-origin,如果包含,證明已經被處理過了, 轉到 3,否則不再處理。

判斷是否同源,如果是則轉交給負責該請求的類處理

是否配置了cors規則,如果沒有配置,且是預檢請求,則拒絕該請求,如果沒有配置,且不是預檢請求,則交給負責該請求的類處理。如果配置了,則對該請求進行校驗。

校驗就是根據corsconfiguration這個類的配置進行判斷:

判斷origin是否合法

判斷method是否合法

判斷header是否合法

如果全部合法,則在response header中新增響應的欄位,並交給負責該請求的類處理,如果不合法,則拒絕該請求。

參考:springboot cors 跨域 @crossorigin

springboot配置cors解決跨域請求問題

Springboot跨域 ajax jsonp請求

springboot配置 org springframework boot spring boot starter web suppress...

Nginx的跨域配置

使用springboot開發前後端分離的應用,可以使用nginx作為閘道器來統一解決跨域問題。這種好處是,可以不修改應用 的情況下,讓應用支...

SpringBoot 2 4 0跨域問題

import org springframework context annotation configuration import org...