1. 程式人生 > 其它 >解決Spring Boot跨域問題

解決Spring Boot跨域問題

技術標籤: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("*"); } }