1. 程式人生 > >SpringBoot後端解決跨域問題

SpringBoot後端解決跨域問題

服務端以SpringBoot框架為核心,除提供轉發到首頁外,只提供RESTful介面,通過Json格式訊息進行互動;

前端以Vue全家桶為核心,實現SPA單頁面應用,以ajax方式與服務端進行通訊;

前後端分離開發,因此會建兩個專案,通過npm run build 打包專案(複製進)專案進行整合

關於跨域在實際開發過程中,發現跨域問題並不是那麼好解決的,因為Springboot安全控制框架使用了Securtiy,它的身份認證基於 JSESSIONID,而axios框架預設是不傳送cookie的,因此需要在axios配置中新增

axios.defaults.withCredentials = true

 

然而因為跨域策略問題,Springboot後端跨域設定也要修改 

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;
 
/**
 * @author Administrator
 * @create 2018/3/12-15:17
 * @DESCRIPTION 跨域系統配置
 */
@Configuration
public class CorsConfig {
    /**
     允許任何域名使用
     允許任何頭
     允許任何方法(post、get等)
     */
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // // addAllowedOrigin 不能設定為* 因為與 allowCredential 衝突,需要設定為具體前端開發地址
        corsConfiguration.addAllowedOrigin("http://localhost:8000");//前端的開發地址
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        // allowCredential 需設定為true
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }
 
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}