若依框架跨域問(wèn)題解決方案與實(shí)戰(zhàn)配置
1. 若依框架跨域問(wèn)題全景解析作為國(guó)內(nèi)主流的企業(yè)級(jí)快速開(kāi)發(fā)框架若依Ruoyi在實(shí)際部署中經(jīng)常面臨跨域訪問(wèn)的挑戰(zhàn)。最近在技術(shù)社區(qū)看到不少開(kāi)發(fā)者反饋前后端分離模式下明明按照文檔配置了CORS為什么還是出現(xiàn)Access-Control-Allow-Origin報(bào)錯(cuò) 這個(gè)問(wèn)題看似簡(jiǎn)單實(shí)則涉及網(wǎng)絡(luò)協(xié)議、框架配置、部署環(huán)境等多重因素。本文將結(jié)合若依4.7.5版本從HTTP協(xié)議層到代碼實(shí)現(xiàn)層徹底講透跨域問(wèn)題的解決方案。關(guān)鍵提示跨域問(wèn)題本質(zhì)是瀏覽器的安全限制與服務(wù)端通信能力無(wú)關(guān)。即使看到401/403狀態(tài)碼也要先解決CORS問(wèn)題才能進(jìn)行后續(xù)調(diào)試。2. 跨域原理深度剖析2.1 瀏覽器同源策略機(jī)制同源策略Same-Origin Policy要求協(xié)議、域名、端口三者完全一致。在若依前后端分離架構(gòu)中常見(jiàn)以下典型場(chǎng)景會(huì)觸發(fā)跨域開(kāi)發(fā)環(huán)境前端8080端口訪問(wèn)后端9200端口生產(chǎn)環(huán)境主站域名訪問(wèn)api子域名測(cè)試環(huán)境IP直連訪問(wèn)域名服務(wù)2.2 預(yù)檢請(qǐng)求Preflight機(jī)制對(duì)于非簡(jiǎn)單請(qǐng)求如Content-Type為application/json瀏覽器會(huì)先發(fā)送OPTIONS請(qǐng)求進(jìn)行預(yù)檢。若依框架中以下操作會(huì)觸發(fā)預(yù)檢使用RequestBody接收J(rèn)SON參數(shù)自定義請(qǐng)求頭如攜帶tokenPUT/DELETE等非標(biāo)準(zhǔn)方法// 典型觸發(fā)預(yù)檢的若依控制器代碼 PostMapping(/update) public AjaxResult update(RequestBody SysUser user) { return success(userService.updateUser(user)); }2.3 CORS響應(yīng)頭核心參數(shù)響應(yīng)頭作用若依配置示例值A(chǔ)ccess-Control-Allow-Origin允許的源域名* 或 https://ruoyi.vipAccess-Control-Allow-Methods允許的HTTP方法GET,POST,PUT,DELETEAccess-Control-Allow-Headers允許的請(qǐng)求頭Authorization,Content-TypeAccess-Control-Max-Age預(yù)檢結(jié)果緩存時(shí)間秒36003. 若依框架跨域配置實(shí)戰(zhàn)3.1 基礎(chǔ)版Spring Boot配置類(lèi)在ruoyi-admin模塊的config包下新增CorsConfigConfiguration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(GET, POST, PUT, DELETE) .allowedHeaders(*) .allowCredentials(true) .maxAge(3600); } }常見(jiàn)坑點(diǎn)allowCredentials(true)時(shí)不能使用allowedOrigins(*)必須指定具體域名3.2 進(jìn)階版Nginx層統(tǒng)一處理在生產(chǎn)環(huán)境推薦使用Nginx統(tǒng)一處理跨域避免每個(gè)應(yīng)用重復(fù)配置server { listen 80; server_name api.ruoyi.vip; location / { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; add_header Access-Control-Allow-Headers Content-Type,Authorization; add_header Access-Control-Allow-Credentials true; if ($request_method OPTIONS) { return 204; } proxy_pass http://127.0.0.1:9200; } }3.3 特殊場(chǎng)景Sa-Token整合方案當(dāng)集成Sa-Token時(shí)需要額外處理token相關(guān)頭部// 在SaTokenConfig中補(bǔ)充配置 Configuration public class SaTokenConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(https://admin.ruoyi.vip) .allowedMethods(*) .allowedHeaders(satoken, Content-Type) .exposedHeaders(satoken) .allowCredentials(true); } }4. 疑難問(wèn)題排查指南4.1 常見(jiàn)報(bào)錯(cuò)與解決方案錯(cuò)誤現(xiàn)象根本原因解決方案403 Forbidden (CORS preflight channel error)預(yù)檢請(qǐng)求未通過(guò)確保OPTIONS請(qǐng)求返回200/204Missing CORS header Access-Control-Allow-Origin響應(yīng)頭未正確配置檢查Nginx或Spring配置是否有誤Credential is not supported if the CORS header Access-Control-Allow-Origin is *憑證模式與通配符沖突改用具體域名并開(kāi)啟allowCredentials4.2 瀏覽器調(diào)試技巧Chrome開(kāi)發(fā)者工具中Network標(biāo)簽勾選Disable cache過(guò)濾選項(xiàng)輸入OPTIONS查找預(yù)檢請(qǐng)求查看Response Headers是否包含CORS相關(guān)頭使用curl模擬預(yù)檢請(qǐng)求curl -X OPTIONS http://api.ruoyi.vip/user/list \ -H Origin: http://localhost:8080 \ -H Access-Control-Request-Method: POST \ -H Access-Control-Request-Headers: content-type \ -I4.3 若依特定問(wèn)題排查場(chǎng)景1代碼生成器接口跨域在ruoyi-generator模塊單獨(dú)添加配置Bean public FilterRegistrationBeanCorsFilter generatorCorsFilter() { UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(); CorsConfiguration config new CorsConfiguration(); config.addAllowedOriginPattern(*); config.addAllowedHeader(*); config.addAllowedMethod(*); source.registerCorsConfiguration(/tool/gen/**, config); return new FilterRegistrationBean(new CorsFilter(source)); }場(chǎng)景2Swagger文檔跨域在application.yml中增加spring: mvc: pathmatch: matching-strategy: ant_path_matcher5. 安全加固建議生產(chǎn)環(huán)境務(wù)必指定具體域名而非通配符.allowedOrigins(https://admin.ruoyi.vip, https://mobile.ruoyi.vip)敏感接口建議結(jié)合CORS與權(quán)限校驗(yàn)PreAuthorize(ss.hasPermi(system:user:edit)) PostMapping(/update) public AjaxResult update(RequestBody SysUser user) { // 業(yè)務(wù)邏輯 }定期檢查CORS配置是否被惡意修改-- 監(jiān)控系統(tǒng)參數(shù)表變更 SELECT * FROM sys_config WHERE config_key LIKE %cors% AND update_time DATE_SUB(NOW(), INTERVAL 1 DAY);實(shí)際項(xiàng)目中我們?cè)龅絅ginx配置被意外覆蓋導(dǎo)致跨域失效的情況。后來(lái)通過(guò)在若依系統(tǒng)監(jiān)控中增加配置變更提醒徹底解決了這類(lèi)問(wèn)題。建議大家在解決基礎(chǔ)跨域問(wèn)題后進(jìn)一步考慮這種防御性編程措施。

相關(guān)新聞

從SHA1到SHA256:密碼學(xué)哈希函數(shù)原理、演進(jìn)與安全實(shí)踐指南

從SHA1到SHA256:密碼學(xué)哈希函數(shù)原理、演進(jìn)與安全實(shí)踐指南

1. 項(xiàng)目概述:從“加密”到“哈?!钡恼J(rèn)知躍遷提到“加密算法”,很多人的第一反應(yīng)是像AES、RSA那樣,用一把密鑰把明文變成密文,需要時(shí)再用密鑰解開(kāi)的雙向過(guò)程。但今天要聊的SHA系列,雖然常被歸在“加密算法”的大類(lèi)里&a…

2026/8/1 1:29:36 閱讀更多
高校數(shù)字化通識(shí)教育的標(biāo)準(zhǔn)化配套路徑

高校數(shù)字化通識(shí)教育的標(biāo)準(zhǔn)化配套路徑

數(shù)字化崗位需求持續(xù)擴(kuò)張背景下,高校通用AI教學(xué)資源供給不足的矛盾逐步凸顯。教育部2025年高校畢業(yè)生就業(yè)質(zhì)量調(diào)研數(shù)據(jù)顯示,經(jīng)管、文法、普通工科61.4%的應(yīng)屆生崗位,明確要求求職者掌握基礎(chǔ)AI工具操作能力,但國(guó)內(nèi)超七成本科院校未開(kāi)…

2026/8/1 1:29:36 閱讀更多
Git常用誤區(qū)總結(jié)

Git常用誤區(qū)總結(jié)

1. .gitignore vs .git/info/exclude 情景:在使用claude時(shí)通常會(huì)在當(dāng)前工作區(qū)生成CLUADE.md,在提交時(shí)一不小心會(huì)將CLUADE.md也提交到倉(cāng)庫(kù)。 解決方法:使用.git/info/exclude 增加提交commit時(shí)應(yīng)該忽略的文件。它的特點(diǎn)是本地私有管理。而.git…

2026/8/1 1:29:36 閱讀更多
IDEA創(chuàng)建Spring MVC項(xiàng)目全流程:從Maven配置到Tomcat部署

IDEA創(chuàng)建Spring MVC項(xiàng)目全流程:從Maven配置到Tomcat部署

1. 從零到一:為什么需要一個(gè)Spring MVC項(xiàng)目?如果你剛接觸Java Web開(kāi)發(fā),或者從其他IDE(比如Eclipse)轉(zhuǎn)過(guò)來(lái),可能會(huì)覺(jué)得在IDEA里新建一個(gè)項(xiàng)目是件挺簡(jiǎn)單的事。但說(shuō)實(shí)話,我見(jiàn)過(guò)太多新手&#xff0c…

2026/8/2 8:45:19 閱讀更多
數(shù)學(xué)建模實(shí)戰(zhàn):基于MILP與啟發(fā)式算法的疫苗生產(chǎn)排程優(yōu)化

數(shù)學(xué)建模實(shí)戰(zhàn):基于MILP與啟發(fā)式算法的疫苗生產(chǎn)排程優(yōu)化

1. 項(xiàng)目概述:從一道賽題到一套完整的工業(yè)優(yōu)化方案2021年“五一杯”數(shù)學(xué)建模競(jìng)賽的A題“疫苗生產(chǎn)問(wèn)題”,在當(dāng)時(shí)那個(gè)特殊的時(shí)期,無(wú)疑是一個(gè)極具現(xiàn)實(shí)意義和挑戰(zhàn)性的題目。它不僅僅是一道數(shù)學(xué)題,更是對(duì)當(dāng)時(shí)全球面臨的疫苗生產(chǎn)與分配瓶…

2026/8/2 8:45:19 閱讀更多
全棧開(kāi)發(fā)的信息基礎(chǔ)

全棧開(kāi)發(fā)的信息基礎(chǔ)

對(duì)于全棧開(kāi)發(fā)的需求 我們要理解這么幾個(gè)東西 1.開(kāi)發(fā)需求 對(duì)于業(yè)務(wù)需求和原型圖需求 2.開(kāi)發(fā)環(huán)境和工具 3.開(kāi)發(fā)經(jīng)驗(yàn)和開(kāi)發(fā)節(jié)奏 4.部署服務(wù)器的相關(guān)信息 你列出的這四個(gè)維度非常精準(zhǔn),基本覆蓋了全棧項(xiàng)目從“紙面”到“線上”的全生命周期。作為全棧開(kāi)發(fā)者(或…

2026/8/2 8:45:19 閱讀更多
Java Base64圖片字符串轉(zhuǎn)File對(duì)象:原理、實(shí)現(xiàn)與性能優(yōu)化

Java Base64圖片字符串轉(zhuǎn)File對(duì)象:原理、實(shí)現(xiàn)與性能優(yōu)化

1. 項(xiàng)目概述:從Base64字符串到File對(duì)象的實(shí)戰(zhàn)轉(zhuǎn)換 在前后端數(shù)據(jù)交互、圖片上傳優(yōu)化以及本地緩存處理等場(chǎng)景中,我們經(jīng)常會(huì)遇到一個(gè)經(jīng)典需求:如何將前端傳來(lái)的一串看似天書(shū)的Base64圖片編碼,在Java后端服務(wù)中,還原成一個(gè)…

2026/8/2 8:45:19 閱讀更多
Terminal Bench 82.7 反超 Pro 預(yù)覽版:V4-Flash Agent 能力拆解

Terminal Bench 82.7 反超 Pro 預(yù)覽版:V4-Flash Agent 能力拆解

Terminal Bench 82.7 反超 Pro 預(yù)覽版:V4-Flash Agent 能力拆解 先說(shuō)一個(gè)反常識(shí)的事實(shí):2026 年 7 月 31 日上線的 DeepSeek-V4-Flash 正式版,在一個(gè)關(guān)鍵 Agent 基準(zhǔn)上,把自己的大哥 V4-Pro-Preview 踩在了腳下——Terminal Bench …

2026/8/2 8:35:18 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多