Spring Boot設定支援跨域請求過程詳解
阿新 • • 發佈:2020-08-10
現代瀏覽器出於安全的考慮, HTTP 請求時必須遵守同源策略,否則就是跨域的 HTTP 請求,預設情況下是被禁止的,IP(域名)不同、或者埠不同、協議不同(比如 HTTP、HTTPS)都會造成跨域問題。
一般前端的解決方案有:
- ① 使用 JSONP 來支援跨域的請求,JSONP 實現跨域請求的原理簡單的說,就是動態建立<script>標籤,然後利用<script>的 SRC 不受同源策略約束來跨域獲取資料。缺點是需要後端配合輸出特定的返回資訊。
- ② 利用反應代理的機制來解決跨域的問題,前端請求的時候先將請求傳送到同源地址的後端,通過後端請求轉發來避免跨域的訪問。
後來 HTML5 支援了 CORS 協議。CORS 是一個 W3C 標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源伺服器,發出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過伺服器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支援 CORS、並且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發起跨域請求。
前端使用了 CORS 協議,就需要後端設定支援非同源的請求,Spring Boot 設定支援非同源的請求有兩種方式。
第一,配置 CorsFilter。
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.setAllowCredentials(true); config.addAllowedMethod("*"); config.addAllowedHeader("*"); config.addExposedHeader("*"); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**",config); return new CorsFilter(configSource); } }
需要配置上述的一段程式碼。第二種方式稍微簡單一些。
第二,在啟動類上新增:
public class Application extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) .allowedHeaders("*") .allowedOrigins("*") .allowedMethods("*"); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。