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());
}
}
測試
下面是一個(gè)前端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)容請(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-08
Java基礎(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-12
java算法題解牛客BM99順時(shí)針旋轉(zhuǎn)矩陣示例
這篇文章主要為大家介紹了java算法題解??虰M99順時(shí)針旋轉(zhuǎn)矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Lombok注解之@SuperBuilder--解決無法builder父類屬性問題
這篇文章主要介紹了Lombok注解之@SuperBuilder--解決無法builder父類屬性問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解
這篇文章主要通過幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-11-11
MyBatis-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-08
Java設(shè)計(jì)模式之抽象工廠模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式分析了抽象工廠模式的概念、功能、定義與使用方法,需要的朋友可以參考下2017-09-09
mybatis新增save結(jié)束后自動(dòng)返回主鍵id詳解
這篇文章主要介紹了mybatis新增save結(jié)束后自動(dòng)返回主鍵id詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring boot集成redis lettuce代碼實(shí)例
這篇文章主要介紹了Spring boot集成redis lettuce代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
spring task 定時(shí)任務(wù)實(shí)現(xiàn)示例
本篇文章主要介紹了spring task 定時(shí)任務(wù)實(shí)現(xiàn)示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01

