springboot如何實(shí)現(xiàn)前后端分離跨域訪問
在springboot項(xiàng)目中,前端html頁面和后端api接口是分離的,實(shí)際項(xiàng)目部署的時(shí)候也是分開部署的。
這樣由于IP不同或者端口不同,就存在跨域問題,導(dǎo)致html無法調(diào)用api。
為解決此問題,實(shí)際項(xiàng)目部署的時(shí)候一般有三種解決方案:
(1)使用Nginx反向代理
使用Nginx反向代理,根據(jù)訪問路徑進(jìn)行攔截,如果是html則指向靜態(tài)頁,如果是api,則把請(qǐng)求跳轉(zhuǎn)到api的訪問地址。
一般這是大部分項(xiàng)目推薦使用的部署方式。
具體Nginx配置如下:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #前端頁面服務(wù)器 server { #監(jiān)聽端口和域名 listen 8080; server_name localhost; #添加頭部信息 proxy_set_header Cookie $http_cookie; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #攔截api接口訪問 location /api/ { proxy_pass http://localhost:8080/; #注意:使用代理地址時(shí)末尾記得加上斜杠"/"。 } #攔截靜態(tài)頁html location / { root html/www; #注意:使用"/"攔截全路徑的時(shí)候記得放在最后。 index index.html index.htm; #index表示首頁 } } }
(2)將api和html部署在同一個(gè)tomcat
由于跨域是IP和端口不同導(dǎo)致的,那么將html和api部署在同一個(gè)tomcat中,就不存在跨域問題。
只需將springboot項(xiàng)目打成war包和html部署在一就行,簡單方便。
這種方式只適合小型項(xiàng)目,一般不推薦。
(3)在springboot代碼層面允許跨域
在springboot項(xiàng)目代碼層面加入支持跨域配置,也可實(shí)現(xiàn)跨域訪問。
這種方式適合開發(fā)調(diào)試階段使用。
一般都要求邊開發(fā)邊調(diào)試,我就是與前端人員進(jìn)行同步開發(fā)調(diào)試,在代碼層面開啟跨域訪問,開發(fā)調(diào)試起來非常方便。
springboot開啟跨域支持非常簡單,只需要在啟動(dòng)類中配置WebMvcConfigurer,并重寫addCorsMappings方法即可。
@Configuration public class MyMvcConfig { @Bean public WebMvcConfigurer webMvcConfigurer(){ return new WebMvcConfigurer() { //配置跨域 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") //允許的路徑 .allowedMethods("*") //允許的方法 .allowedOrigins("*") //允許的網(wǎng)站 .allowedHeaders("*") //允許的請(qǐng)求頭 .allowCredentials(true) .maxAge(3600); } }
總結(jié)
以上三種方式均可解決跨域問題。
- 方法1是推薦的部署方式;
- 方法2是適合小項(xiàng)目;
- 方法3是推薦開發(fā)調(diào)試階段使用
好了,這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot讀取bootstrap配置及knife4j版本兼容性問題及解決
這篇文章主要介紹了springboot讀取bootstrap配置及knife4j版本兼容性問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java中的MessageFormat.format用法實(shí)例
這篇文章主要介紹了Java中的MessageFormat.format用法實(shí)例,本文先是講解了MessageFormat的語法,然后給出了多個(gè)操作實(shí)例,需要的朋友可以參考下2015-06-06Mybatis使用foreach標(biāo)簽實(shí)現(xiàn)批量插入方式
這篇文章主要介紹了Mybatis使用foreach標(biāo)簽實(shí)現(xiàn)批量插入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式
這篇文章主要介紹了springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08spring中BeanPostProcessor的作用和使用注意事項(xiàng)
在Spring框架中,BeanPostProcessor?是一個(gè)核心擴(kuò)展接口,允許你在Bean實(shí)例化的過程中插入自定義邏輯,本文給大家介紹spring中BeanPostProcessor的作用,感興趣的朋友一起看看吧2025-04-04springboot多項(xiàng)目結(jié)構(gòu)實(shí)現(xiàn)
本文主要介紹了springboot多項(xiàng)目結(jié)構(gòu)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01spring boot創(chuàng)建項(xiàng)目包依賴問題的解決
本篇文章主要介紹了spring boot創(chuàng)建項(xiàng)目包依賴問題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過程
Spring Security基于Spring開發(fā),項(xiàng)目中如果使用Springboot作為基礎(chǔ),配合Spring Security做權(quán)限更加方便,而Shiro需要和Spring進(jìn)行整合開發(fā)。因此作為spring全家桶中的Spring Security在java領(lǐng)域很常用2022-07-07