SpringBoot服務(wù)器端解決跨域問題
本文導(dǎo)航
SpringBoot解決跨域問題的兩種方案:
1、通過給方法或者類加注解的形式,@CrossOrigin。
2、繼承接口,重寫addCorsMappings方法。
第一種方式:
@RestController
@CrossOrigin("http://localhost:8081")
public class BaseController {
@GetMapping("/hello")
public String testGet(){
return "get";
}
@PutMapping("/doPut")
public String testPut(){
return "put";
}
}
指定請求來源,可以寫成“*”,表示接收所有來源的請求。
第二種方式:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:8081")
.allowedHeaders("*")
.allowedMethods("*")
.maxAge(30*1000);
}
}
allowOrigins也可以寫成allowedOrigins(" * "),表示接收所有來源的請求。
注意點(diǎn):
1、路徑來源的寫法問題
如果后臺(tái)指定路徑來源為:http://localhost:8081
那么在瀏覽器里訪問前端頁面的時(shí)候,必須用 http://localhost:8081,不可以寫成127.0.0.1或者本機(jī)ip地址。否則還是會(huì)報(bào)跨域錯(cuò)誤。測試如下
后臺(tái)設(shè)置:
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:8081")
.allowedHeaders("*")
.allowedMethods("*")
.maxAge(30*1000);
}
前端請求:
<script>
doGet = function () {
$.get('http://localhost:8080/hello', function (msg) {
$("#app").html(msg);
});
}
doPut = function () {
$.ajax({
type:'put',
url:'http://localhost:8080/doPut',
success:function (msg) {
$("#app").html(msg);
}
})
}
</script>
啟動(dòng)服務(wù),瀏覽器里訪問:
http://localhost:8081/index.html
正常返回結(jié)果
瀏覽器里訪問:
http://127.0.0.1:8081/index.html
報(bào)跨域錯(cuò)誤如下:

所以說,瀏覽器訪問路徑需要與后臺(tái)allowOrigin里設(shè)置的參數(shù)一致。
那如果代碼里的訪問路徑可以不一樣嗎,比如:
doGet = function () {
$.get('http://127.0.0.1:8080/hello', function (msg) { //本機(jī)ip地址
$("#app").html(msg);
});
}
doPut = function () {
$.ajax({
type:'put',
url:'http://192.168.1.26:8080/doPut',
success:function (msg) {
$("#app").html(msg);
}
})
}
經(jīng)過測試,是可以的,只要瀏覽器里訪問頁面的路徑寫法與后臺(tái)保持一致就可以了。
2、攜帶Cookie
有時(shí)候,前端調(diào)用后端接口的時(shí)候,必須要攜帶cookie(比如后端用session認(rèn)證),這個(gè)時(shí)候,就不能簡單的使用allowOrigins("*")了,必須要指定具體的ip地址,否則也會(huì)報(bào)錯(cuò)。
以上就是SpringBoot服務(wù)器端解決跨域問題的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 解決跨域的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)基于token認(rèn)證的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)基于token認(rèn)證的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Mybatis執(zhí)行流程、緩存原理及相關(guān)面試題匯總
最近剛學(xué)完MyBatis,趁著大好機(jī)會(huì),總結(jié)一下它的執(zhí)行流程,面試也愛問這個(gè),下面這篇文章主要給大家介紹了關(guān)于Mybatis執(zhí)行流程、緩存原理及相關(guān)面試題的相關(guān)資料,需要的朋友可以參考下2022-02-02
java?環(huán)境配置(2023年詳細(xì)教程)
這篇文章首先為了完善我的知識(shí)體系,今后一些軟件的安裝教程也可能會(huì)用到想寫一個(gè)更加詳細(xì)的,因?yàn)檫@并不僅僅是寫給?IT?行業(yè)的,其它行業(yè)可能也需要配置java環(huán)境2023-06-06
SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫分表與讀寫分離的示例
本文主要介紹了SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫分表與讀寫分離的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
關(guān)于Mybatis中foreach遍歷Map的實(shí)現(xiàn)示例
這篇文章主要介紹了關(guān)于Mybatis中foreach遍歷Map的實(shí)現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義?SQL、存儲(chǔ)過程以及高級映射,需要的朋友可以參考下2023-05-05
Java中數(shù)組容器(ArrayList)設(shè)的計(jì)與實(shí)現(xiàn)
本篇文章主要跟大家介紹我們最常使用的一種容器ArrayList、Vector的原理,并且自己使用Java實(shí)現(xiàn)自己的數(shù)組容器MyArrayList,讓自己寫的容器能像ArrayList那樣工作,感興趣的可以了解一下2022-07-07

