Spring Boot設置支持跨域請求過程詳解
現(xiàn)代瀏覽器出于安全的考慮, HTTP 請求時必須遵守同源策略,否則就是跨域的 HTTP 請求,默認情況下是被禁止的,IP(域名)不同、或者端口不同、協(xié)議不同(比如 HTTP、HTTPS)都會造成跨域問題。
一般前端的解決方案有:
- ① 使用 JSONP 來支持跨域的請求,JSONP 實現(xiàn)跨域請求的原理簡單的說,就是動態(tài)創(chuàng)建<script>標簽,然后利用<script>的 SRC 不受同源策略約束來跨域獲取數(shù)據(jù)。缺點是需要后端配合輸出特定的返回信息。
- ② 利用反應代理的機制來解決跨域的問題,前端請求的時候先將請求發(fā)送到同源地址的后端,通過后端請求轉(zhuǎn)發(fā)來避免跨域的訪問。
后來 HTML5 支持了 CORS 協(xié)議。CORS 是一個 W3C 標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務器,發(fā)出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過服務器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支持 CORS、并且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發(fā)起跨域請求。
前端使用了 CORS 協(xié)議,就需要后端設置支持非同源的請求,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("*"); } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring中使用自定義ThreadLocal存儲導致的坑及解決
這篇文章主要介紹了Spring中使用自定義ThreadLocal存儲導致的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java 線程池ExecutorService詳解及實例代碼
這篇文章主要介紹了Java 線程池ExecutorService詳解及實例代碼的相關資料,線程池減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷.如果不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量線程而導致消耗系統(tǒng)內(nèi)存以及”過度切換“2016-11-11詳解Java中NullPointerException異常的原因和解決辦法
本文主要介紹了詳解Java中NullPointerException異常的原因和解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07