SpringBoot跨域問題的解決方法實(shí)例
談到跨域問題,首先我們要認(rèn)識(shí)一下瀏覽器的同源策略
百度百科對(duì)同源策略的解釋
當(dāng)一個(gè)瀏覽器的兩個(gè)tab頁中分別打開來 百度和谷歌的頁面
當(dāng)瀏覽器的百度tab頁執(zhí)行一個(gè)腳本的時(shí)候會(huì)檢查這個(gè)腳本是屬于哪個(gè)頁面的,
即檢查是否同源,只有和百度同源的腳本才會(huì)被執(zhí)行。 [1]
如果非同源,那么在請(qǐng)求數(shù)據(jù)時(shí),瀏覽器會(huì)在控制臺(tái)中報(bào)一個(gè)異常,提示拒絕訪問。
同源策略是瀏覽器的行為,是為了保護(hù)本地?cái)?shù)據(jù)不被JavaScript代碼獲取回來的數(shù)據(jù)污染,因此攔截的是客戶端發(fā)出的請(qǐng)求回來的數(shù)據(jù)接收,即請(qǐng)求發(fā)送了,服務(wù)器響應(yīng)了,但是無法被瀏覽器接收。
其實(shí)就是,客戶端瀏覽器請(qǐng)求url去獲取資源,也就是請(qǐng)求服務(wù)器的ip地址加上端口號(hào)(http://主機(jī)名:端口號(hào)),如果服務(wù)器所在的Ip地址(http://主機(jī)名:端口號(hào))并不一致,這就屬于不同源,就產(chǎn)生一個(gè)跨域的問題,瀏覽器會(huì)禁止服務(wù)端返回?cái)?shù)據(jù)
解決方法有兩種
- 前端制造不符合規(guī)則的請(qǐng)求規(guī)則
- 后端進(jìn)行跨域支持(告訴前端別管這些規(guī)則了,按我的來)
跨域問題
跨域問題是指下面一些地方不同(至少一處)
- 請(qǐng)求協(xié)議不同
- ip地址不同
- 端口號(hào)不同
- 請(qǐng)求方式不同
SpringBoot解決跨域問題
/** * @Author: Ember * @Date: 2021/4/26 22:16 * @Description: */ @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings (CorsRegistry registry) { String[] allowOrigins ={"http://localhost:8080/","https://www.quyo.fun/"}; //允許所有形式的跨域請(qǐng)求 registry.addMapping ("/**") .allowedOriginPatterns ("*") .allowCredentials (true) .allowedMethods ("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .maxAge (3600); } private CorsConfiguration buildConfig () { CorsConfiguration corsConfiguration = new CorsConfiguration (); List<String> list = new ArrayList<>(); list.add ("*"); corsConfiguration.setAllowedOrigins (list); corsConfiguration.addAllowedOrigin ("*"); corsConfiguration.addAllowedHeader ("*"); corsConfiguration.addAllowedMethod ("*"); return corsConfiguration; } @Bean public CorsFilter corsFilter () { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource (); source.registerCorsConfiguration ("/**", buildConfig ()); return new CorsFilter (source); } @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter( Charset.forName("UTF-8")); return converter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(responseBodyConverter()); } }
測(cè)試
下面是一個(gè)前端AJAX小測(cè)試
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <link type="test/css" href="css/style.css" rel="external nofollow" rel="stylesheet"> <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript"> $(function(){ $("#cors").click( function(){ $.ajax({ headers:{"token":"","Content-Type":"application/json;charset=UTF-8","Access-Control-Allow-Origin":"*"}, url:"http://47.119.112.252/book/index/show/allBlogs", success:function(data){ console.log("start") console.log(data) alert(data); } }) }); }); </script> <body> <input type="button" id="cors" value="core跨域測(cè)試" </body> </html>
跨域問題解決。
總結(jié)
到此這篇關(guān)于SpringBoot跨域問題解決的文章就介紹到這了,更多相關(guān)SpringBoot跨域問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程
這篇文章主要介紹了Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程,本文給大家分析具體實(shí)現(xiàn)過程,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Java基礎(chǔ)之Integer使用的注意事項(xiàng)及面試題
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之Integer使用注意事項(xiàng)及面試題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12java算法題解牛客BM99順時(shí)針旋轉(zhuǎn)矩陣示例
這篇文章主要為大家介紹了java算法題解??虰M99順時(shí)針旋轉(zhuǎn)矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Lombok注解之@SuperBuilder--解決無法builder父類屬性問題
這篇文章主要介紹了Lombok注解之@SuperBuilder--解決無法builder父類屬性問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解
這篇文章主要通過幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-11-11MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)
這篇文章主要介紹了MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Java設(shè)計(jì)模式之抽象工廠模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式分析了抽象工廠模式的概念、功能、定義與使用方法,需要的朋友可以參考下2017-09-09mybatis新增save結(jié)束后自動(dòng)返回主鍵id詳解
這篇文章主要介紹了mybatis新增save結(jié)束后自動(dòng)返回主鍵id詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Spring boot集成redis lettuce代碼實(shí)例
這篇文章主要介紹了Spring boot集成redis lettuce代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04spring task 定時(shí)任務(wù)實(shí)現(xiàn)示例
本篇文章主要介紹了spring task 定時(shí)任務(wù)實(shí)現(xiàn)示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01