1、什麼情況下會出現跨域問題

通常,在前端工程師的開發過程中,往往在本地機器啟動前端服務, 而呼叫的後端介面服務是在另外一臺機器執行,這時就會出現跨域問題,讓介面無法調通。

而到了測試環境和生產環境,可以使用Nginx去解決這個問題。

這裡我們僅考慮開發環境,在不借助Nginx的情況下,解決跨域。

2、解決方案

在SpringBoot工程中,增加跨域配置即可。

3、實現

新增一個跨域配置類 CrossDomainConfig,在其中配置允許跨域訪問的url、請求方式、Header等。程式碼如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; @Configuration
public class CrossDomainConfig{ public CrossDomainConfig() { }
  private CorsConfiguration buildConfig() {
    
     // 新增cors配置資訊
  CorsConfiguration corsConfiguration = new CorsConfiguration();
     corsConfiguration.addAllowedOrigin("http://localhost:8080");
  // * 代表所有url
corsConfiguration.addAllowedOrigin("*"); // 設定允許請求的方式
corsConfiguration.addAllowedMethod("*"); // 設定允許的header
corsConfiguration.addAllowedHeader("*"); // 設定是否傳送cookie資訊
corsConfiguration.setAllowCredentials(true);   return corsConfiguration;
  } @Bean
public CorsFilter corsFilter() {
 
// 為url新增對映路徑
UrlBasedCorsConfigurationSource crossDomainSource = new UrlBasedCorsConfigurationSource();
crossDomainSource.registerCorsConfiguration("/**", buildConfig()); // 返回重新定義好的配置
return new CorsFilter(corsSource);
}
}

重啟後臺工程,會發現,跨域問題被如此簡單的解決了。