SpringBoot實(shí)現(xiàn)全局和局部跨域的兩種方式
前言
在如今前后端分離的開發(fā)模式下,跨域是一個(gè)非常經(jīng)典的問題,解決的方式也有很多,比如代理服務(wù)器,使用JSONP
我之前也寫過一篇解決跨域問題的文章,感興趣的可以參考:解決Vue前后端跨域問題的多種方式
上面兩種解決跨域的辦法都是在前端角度的,這次站在后端角度,從全局和局部?jī)蓚€(gè)方面解決跨域問題
什么是跨域
所謂的跨域請(qǐng)求就是指:當(dāng)前發(fā)起請(qǐng)求的域與該請(qǐng)求指向的資源所在的域不一樣。這里的域指的是這樣的一個(gè)概念:我們認(rèn)為若協(xié)議 + 域名 + 端口號(hào)均相同,那么就是同域。
解決跨域
后端解決跨域,主要借助cors
局部解決(使用注解)
可以使用注解:@CrossOrigin
該注解開啟之后,就可以解決跨域問題,它可以加在controller中,表面這個(gè)controller中的全部方法都經(jīng)過跨域處理,也可以單獨(dú)加在某個(gè)方法上,表示只有這一個(gè)方法經(jīng)過跨域處理

但是它的默認(rèn)值為*,也就是默認(rèn)全部放行,理論來說不太安全

如果項(xiàng)目里面又多個(gè)controller或者多個(gè)方法,使用注解就會(huì)顯得非常雞肋,如果一個(gè)一個(gè)加太麻煩了,這時(shí)候就可以使用全局注解了
全局解決
原理:創(chuàng)建一個(gè)配置類,開啟跨域注冊(cè),并使用@Configuration注解把這個(gè)類當(dāng)作一個(gè)配置注入到項(xiàng)目中
我們可以自由配置請(qǐng)求方式,以及域名權(quán)限,請(qǐng)求時(shí)間,更加細(xì)度的去控制跨域范圍
package com.wyh.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Description: 解決全局跨域
* @Author: 魏一鶴
* @Date: 2022-11-30 22:44
**/
@Configuration
public class CorsMapping implements WebMvcConfigurer {
@Override
/**
* 重新跨域支持方法
* CorsRegistry 開啟跨域注冊(cè)
*/
public void addCorsMappings(CorsRegistry registry) {
//addMapping 添加可跨域的請(qǐng)求地址
registry.addMapping("/**")
//設(shè)置跨域 域名權(quán)限 規(guī)定由某一個(gè)指定的域名+端口能訪問跨域項(xiàng)目
.allowedOrigins("*")
//是否開啟cookie跨域
.allowCredentials(false)
//規(guī)定能夠跨域訪問的方法類型
.allowedMethods("GET","POST","DELETE","PUT","OPTIONS")
//添加驗(yàn)證頭信息 token
//.allowedHeaders()
//預(yù)檢請(qǐng)求存活時(shí)間 在此期間不再次發(fā)送預(yù)檢請(qǐng)求
.maxAge(3600);
}
}
注意:千萬(wàn)不要忘了@Configuration注解,不然配置是無效的?。?!

總結(jié)
以上就是SpringBoot解決全局和局部跨域問題的兩種方式了,根據(jù)自己的需求靈活選擇即可!更多相關(guān)SpringBoot 全局和局部跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+Vue項(xiàng)目線上買菜系統(tǒng)源碼展示
本線上買菜系統(tǒng)采用的數(shù)據(jù)庫(kù)是Mysql,使用springboot框架開發(fā)。在設(shè)計(jì)過程中,充分保證了系統(tǒng)代碼的良好可讀性、實(shí)用性、易擴(kuò)展性、通用性、便于后期維護(hù)、操作方便以及頁(yè)面簡(jiǎn)潔等特點(diǎn),需要的朋友可以參考下2022-08-08
vue-cli如何修改打包項(xiàng)目結(jié)構(gòu)及前綴
這篇文章主要介紹了vue-cli如何修改打包項(xiàng)目結(jié)構(gòu)及前綴問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Vue淺析axios二次封裝與節(jié)流及防抖的實(shí)現(xiàn)
axios是基于promise的HTTP庫(kù),可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios,?axios),本文給大家介紹axios的二次封裝和節(jié)流與防抖2022-08-08
vue打包相關(guān)細(xì)節(jié)整理(小結(jié))
這篇文章主要介紹了vue打包相關(guān)細(xì)節(jié)整理(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09

