Spring Boot設(shè)置支持跨域請(qǐng)求過(guò)程詳解
現(xiàn)代瀏覽器出于安全的考慮, HTTP 請(qǐng)求時(shí)必須遵守同源策略,否則就是跨域的 HTTP 請(qǐng)求,默認(rèn)情況下是被禁止的,IP(域名)不同、或者端口不同、協(xié)議不同(比如 HTTP、HTTPS)都會(huì)造成跨域問(wèn)題。
一般前端的解決方案有:
① 使用 JSONP 來(lái)支持跨域的請(qǐng)求,JSONP 實(shí)現(xiàn)跨域請(qǐng)求的原理簡(jiǎn)單的說(shuō),就是動(dòng)態(tài)創(chuàng)建<script>標(biāo)簽,然后利用<script>的 SRC 不受同源策略約束來(lái)跨域獲取數(shù)據(jù)。缺點(diǎn)是需要后端配合輸出特定的返回信息。 ② 利用反應(yīng)代理的機(jī)制來(lái)解決跨域的問(wèn)題,前端請(qǐng)求的時(shí)候先將請(qǐng)求發(fā)送到同源地址的后端,通過(guò)后端請(qǐng)求轉(zhuǎn)發(fā)來(lái)避免跨域的訪問(wèn)。后來(lái) HTML5 支持了 CORS 協(xié)議。CORS 是一個(gè) W3C 標(biāo)準(zhǔn),全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務(wù)器,發(fā)出 XMLHttpRequest 請(qǐng)求,從而克服了 AJAX 只能同源使用的限制。它通過(guò)服務(wù)器增加一個(gè)特殊的 Header[Access-Control-Allow-Origin]來(lái)告訴客戶端跨域的限制,如果瀏覽器支持 CORS、并且判斷 Origin 通過(guò)的話,就會(huì)允許 XMLHttpRequest 發(fā)起跨域請(qǐng)求。
前端使用了 CORS 協(xié)議,就需要后端設(shè)置支持非同源的請(qǐng)求,Spring Boot 設(shè)置支持非同源的請(qǐng)求有兩種方式。
第一,配置 CorsFilter。
@Configurationpublic 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); }}
需要配置上述的一段代碼。第二種方式稍微簡(jiǎn)單一些。
第二,在啟動(dòng)類上添加:
public class Application extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping('/**') .allowCredentials(true) .allowedHeaders('*') .allowedOrigins('*') .allowedMethods('*'); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python基于socket模擬實(shí)現(xiàn)ssh遠(yuǎn)程執(zhí)行命令2. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式3. 使用Python和百度語(yǔ)音識(shí)別生成視頻字幕的實(shí)現(xiàn)4. Java封裝數(shù)組實(shí)現(xiàn)包含、搜索和刪除元素操作詳解5. ajax請(qǐng)求添加自定義header參數(shù)代碼6. JAVA上加密算法的實(shí)現(xiàn)用例7. Gitlab CI-CD自動(dòng)化部署SpringBoot項(xiàng)目的方法步驟8. Django-migrate報(bào)錯(cuò)問(wèn)題解決方案9. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)10. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問(wèn)題……
