SpringBoot後端解決跨域問題
阿新 • • 發佈:2018-11-12
服務端以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); } }