SpringBoot跨域問題的解決方法實例
談到跨域問題,首先我們要認(rèn)識一下瀏覽器的同源策略
百度百科對同源策略的解釋
當(dāng)一個瀏覽器的兩個tab頁中分別打開來 百度和谷歌的頁面
當(dāng)瀏覽器的百度tab頁執(zhí)行一個腳本的時候會檢查這個腳本是屬于哪個頁面的,
即檢查是否同源,只有和百度同源的腳本才會被執(zhí)行。 [1]
如果非同源,那么在請求數(shù)據(jù)時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。
同源策略是瀏覽器的行為,是為了保護本地數(shù)據(jù)不被JavaScript代碼獲取回來的數(shù)據(jù)污染,因此攔截的是客戶端發(fā)出的請求回來的數(shù)據(jù)接收,即請求發(fā)送了,服務(wù)器響應(yīng)了,但是無法被瀏覽器接收。
其實就是,客戶端瀏覽器請求url去獲取資源,也就是請求服務(wù)器的ip地址加上端口號(http://主機名:端口號),如果服務(wù)器所在的Ip地址(http://主機名:端口號)并不一致,這就屬于不同源,就產(chǎn)生一個跨域的問題,瀏覽器會禁止服務(wù)端返回數(shù)據(jù)
解決方法有兩種
- 前端制造不符合規(guī)則的請求規(guī)則
- 后端進行跨域支持(告訴前端別管這些規(guī)則了,按我的來)
跨域問題
跨域問題是指下面一些地方不同(至少一處)
- 請求協(xié)議不同
- ip地址不同
- 端口號不同
- 請求方式不同
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/"}; //允許所有形式的跨域請求 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()); } }
測試
下面是一個前端AJAX小測試
<!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跨域測試" </body> </html>
跨域問題解決。
總結(jié)
到此這篇關(guān)于SpringBoot跨域問題解決的文章就介紹到這了,更多相關(guān)SpringBoot跨域問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程
這篇文章主要介紹了Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程,本文給大家分析具體實現(xiàn)過程,結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08Java基礎(chǔ)之Integer使用的注意事項及面試題
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之Integer使用注意事項及面試題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12java算法題解牛客BM99順時針旋轉(zhuǎn)矩陣示例
這篇文章主要為大家介紹了java算法題解??虰M99順時針旋轉(zhuǎn)矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Lombok注解之@SuperBuilder--解決無法builder父類屬性問題
這篇文章主要介紹了Lombok注解之@SuperBuilder--解決無法builder父類屬性問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)
這篇文章主要介紹了MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08mybatis新增save結(jié)束后自動返回主鍵id詳解
這篇文章主要介紹了mybatis新增save結(jié)束后自動返回主鍵id詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Spring boot集成redis lettuce代碼實例
這篇文章主要介紹了Spring boot集成redis lettuce代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04spring task 定時任務(wù)實現(xiàn)示例
本篇文章主要介紹了spring task 定時任務(wù)實現(xiàn)示例,具有一定的參考價值,有興趣的可以了解一下。2017-01-01