解決Spring Boot跨域問題
阿新 • • 發佈:2021-02-04
技術標籤:Spring Boot實戰springspring bootjava
什麼是跨域問題呢
首先什麼是跨域問題呢?為什麼會產生呢?
眾所周知,Spring Boot專案預設是執行在8080埠的,而Vue專案預設也是執行在8080埠的,如果是前後端分離的專案,就必須要對某個專案的執行埠號進行修改,如果執行在8081埠的Vue專案去訪問執行在8080埠的Spring Boot專案的時候就會報錯,如下
在這裡介紹兩種常用的,簡單的解決方案,除此之外還有介面程式設計的方法、過濾器實現的方法,有興趣的可以瞭解一下哈
方案一:註解驅動
Spring 4.2後提供了@CrossOrigin註解,該註解可以標註於方法或者類上,包含了以下屬性:
屬性 | 含義 |
---|---|
value | 指定所支援域的集合,表示所有域都支援,預設值為。這些值對應HTTP請求頭中的Access-Control-Allow-Origin |
origins | 同value |
allowedHeaders | 允許請求頭中的header,預設都支援 |
exposedHeaders | 響應頭中允許訪問的header,預設為空 |
methods | 支援請求的方法,比如GET,POST,PUT等,預設和Controller中的方法上標註的一致。 |
allowCredentials | 是否允許cookie隨請求傳送,使用時必須指定具體的域 |
maxAge | 預請求的結果的有效期,預設30分鐘 |
我們來改造一下方法:
@RequestMapping ("hello")
@ResponseBody
@CrossOrigin(value = "*")//其實這裡啥也不寫就OK了
public String hello() {
return "hello";
}
表示允許所有域都支援
方案二:寫一個配置類
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET","HEAD","POST","PUT")
.allowCredentials(true)
.allowedHeaders("*");
}
}