為什么需要配置CORS?
在前后端分離的開發(fā)模式下,前端頁面通常是部署在獨(dú)立的服務(wù)器上,而后端接口部署在另一個(gè)服務(wù)器上。這就會產(chǎn)生跨域問題??缬騿栴}是由于瀏覽器基于安全性考慮設(shè)置的一種限制,即同源策略。同源策略是瀏覽器的一個(gè)安全特性,它限制了從同一個(gè)源加載的文檔或腳本如何與來自另一個(gè)源的資源進(jìn)行交互。
如果不配置CORS,當(dāng)你的前端頁面發(fā)起跨域請求時(shí),瀏覽器就會阻止這個(gè)請求,從而導(dǎo)致請求失敗。因此需要在SpringBoot項(xiàng)目中配置CORS,以解決跨域問題。
SpringBoot中如何配置CORS?
在SpringBoot中配置CORS非常簡單,只需要在配置類中添加相關(guān)配置即可。最常用的兩種方式如下:
使用@CrossOrigin注解
在SpringBoot項(xiàng)目中,你可以在Controller類或者方法上添加@CrossOrigin注解,來配置該類或方法的跨域訪問策略。
示例代碼如下:
@CrossOrigin(origins = "http://example.com", maxAge = 3600)
@RestController
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}在上面的例子中,@CrossOrigin注解指定了允許訪問的源站為"http://example.com",并且預(yù)檢請求的有效期為3600秒(1小時(shí))。
1. 使用WebMvcConfigurer配置
除了使用@CrossOrigin注解,我們也可以通過實(shí)現(xiàn)WebMvcConfigurer接口,在配置類中統(tǒng)一配置CORS策略。
示例代碼如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}在上面的例子中,我們通過實(shí)現(xiàn)addCorsMappings方法,配置了允許跨域訪問的路徑"/**"(所有路徑),允許的源站為"http://example.com",允許的請求方法有GET、POST、PUT、DELETE,允許攜帶任意頭部信息,允許發(fā)送cookie,預(yù)檢請求的有效期為3600秒(1小時(shí))。
CORS配置的常用參數(shù)
在配置CORS時(shí),可以使用以下常用參數(shù):
allowedOrigins: 允許跨域的源站,可以是具體的域名,也可以使用"*"表示允許所有源站
allowedMethods: 允許跨域訪問的HTTP方法,常見的有GET、POST、PUT、DELETE等
allowedHeaders: 允許攜帶的請求頭,可以使用"*"表示允許任意頭部
exposedHeaders: 允許客戶端訪問的響應(yīng)頭
allowCredentials: 是否允許發(fā)送Cookie等憑證信息
maxAge: 預(yù)檢請求的有效期,單位為秒
CORS配置的注意事項(xiàng)
在配置CORS時(shí),需要注意以下幾點(diǎn):
allowedOrigins不能使用"*"和具體域名混用,否則會報(bào)錯(cuò)
如果需要客戶端攜帶Cookie等憑證信息,必須將allowCredentials設(shè)置為true,同時(shí)allowedOrigins也不能使用"*"
預(yù)檢請求的有效期maxAge建議設(shè)置為3600秒(1小時(shí))以上,減少預(yù)檢請求的頻率
如果不確定跨域請求的具體情況,可以先放開限制,等確定后再收緊配置
總結(jié)
SpringBoot中配置CORS非常簡單,無論是使用@CrossOrigin注解還是實(shí)現(xiàn)WebMvcConfigurer接口,都可以很方便地解決跨域問題。對于CORS的配置參數(shù),我們需要根據(jù)實(shí)際的跨域需求進(jìn)行靈活調(diào)整。同時(shí)在配置時(shí),也要注意一些常見的注意事項(xiàng),以確保CORS配置的正確性。只要掌握了CORS的基本原理和SpringBoot中的配置方式,跨域問題就可以輕松解決了。