若依框架下前后端分離項目交互流程詳解

在企業級前后端分離項目開發中(如若依RuoYi),前端與后端的數據交互、安全認證、權限校驗、響應處理都是必須關注的重點。本文將以“課程管理列表查詢”為例,詳細梳理整個交互流程,每一步均有解析說明和典型代碼,方便大家學習和復用。


一、前端請求環節:Axios 封裝與攔截器

要點解析

  • Axios實例創建
    配置 baseURL、超時等參數,確保所有接口走統一實例,便于全局維護。

  • 請求攔截器

    • 判斷是否需要 token(如開放接口可配置 isToken=false)

    • 自動攜帶用戶 token,無感集成到請求頭

    • 防止重復提交(如 isRepeatSubmit 參數控制),統一 GET 參數處理等

  • 響應攔截器

    • 針對不同 HTTP 狀態碼/業務狀態碼(如 401、500)進行全局提示、重定向、彈窗等友好交互

    • 例如 token 失效自動重定向到登錄頁,操作失敗統一錯誤提示

代碼示例

import axios from 'axios';
import { getToken } from '@/utils/auth';const service = axios.create({baseURL: import.meta.env.VITE_APP_BASE_API, // 統一接口前綴timeout: 10000
});// 請求攔截器
service.interceptors.request.use(config => {// 判斷是否需要帶 tokenconst isToken = (config.headers || {}).isToken !== false;if (getToken() && isToken) {config.headers['Authorization'] = 'Bearer ' + getToken();}return config;
}, error => Promise.reject(error));// 響應攔截器
service.interceptors.response.use(res => {// 處理業務狀態碼if (res.data.code !== 200) {if (res.data.code === 401) {// token 過期彈窗/重定向}return Promise.reject(res.data.msg || 'Error');}return res.data;
}, error => Promise.reject(error));export default service;

二、開發環境跨域解決:本地代理配置

要點解析

  • 本地開發時前端和后端端口不同(如 3000、8080),會產生跨域問題

  • 配置代理服務器(如 Vite、Webpack DevServer),自動將前端的“偽接口前綴”請求轉發到真實后端接口

  • 好處:開發時免跨域,接口路徑與線上保持一致

代碼示例(vite.config.js)

export default defineConfig({server: {proxy: {'/dev-api': {target: 'http://localhost:8080',changeOrigin: true,rewrite: path => path.replace(/^\/dev-api/, '')}}}
});

解析說明

  • 前端寫 /dev-api/course/course/list,代理自動轉發并去掉 /dev-api,最后變成 /course/course/list 到后端服務。


三、后端接口設計:身份認證與權限控制

要點解析

  • 后端基于 Spring Boot + Spring Security

  • token 認證用于確認用戶身份,權限校驗(如 @PreAuthorize)用于控制接口操作范圍

  • 權限標識如 course:course:list 與前端按鈕、菜單權限保持一致

  • 返回統一響應格式便于前端處理

代碼示例(Controller)

@RestController
@RequestMapping("/course/course")
public class CourseController {// 權限控制,只有擁有 'course:course:list' 權限的用戶才能訪問@PreAuthorize("@ss.hasPermi('course:course:list')")@GetMapping("/list")public TableDataInfo list(Course course) {startPage(); // 分頁處理List<Course> list = courseService.selectCourseList(course);return getDataTable(list); // 統一格式}
}

解析說明

  • @PreAuthorize 在方法執行前自動校驗權限,保證數據安全。

  • 認證(Authentication)和授權(Authorization)分離,分別處理“你是誰”“你能干什么”。


四、前后端完整流程串聯

?要點解析

  • 前端 Axios 發送請求(帶 token),代理轉發到后端

  • 后端校驗 token 身份,再校驗接口權限

  • 返回 JSON 響應,前端響應攔截統一渲染或異常處理

流程圖

sequenceDiagramparticipant F as 前端(Vue+Axios)participant P as Vite代理participant B as 后端(Spring Boot)F->>P: GET /dev-api/course/course/list (帶token)P->>B: 轉發為 /course/course/listB->>B: 校驗token與權限B-->>P: 返回數據(JSON)P-->>F: 返回數據F->>F: 響應攔截器處理、渲染表格/提示

五、響應與全局異常處理

要點解析

  • 前端通過響應攔截器判斷返回碼,自動處理 401(重登)、500(錯誤)、其他(消息提示)

  • 統一彈窗或通知,提升用戶體驗和開發效率

代碼示例

import { ElMessage } from 'element-plus';
service.interceptors.response.use(res => {if (res.code !== 200) {ElMessage.error(res.msg || '請求失敗');return Promise.reject(res.msg);}return res;},error => {ElMessage.error(error.message || '請求出錯');return Promise.reject(error);}
);

解析說明

  • 只需在響應攔截器集中處理,頁面調用接口時無需重復寫 try/catch。


六、前端實際調用接口示例

要點解析

  • 業務組件只需調用封裝好的 API,無需關心 token、異常等細節

  • 代碼整潔,職責清晰

代碼示例

import request from '@/utils/request';export function listCourse(query) {return request({url: '/course/course/list',method: 'get',params: query});
}// 在頁面組件中
listCourse({ pageNum: 1, pageSize: 10 }).then(res => {this.tableData = res.rows;this.total = res.total;
});

七、總結與建議

要點解析

  • Axios 攔截器建議做成全局模塊,減少重復代碼

  • 權限標識前后端統一管理,接口安全與頁面渲染保持一致

  • 本地代理開發和生產環境分開配置,防止上線出錯

  • 統一響應結構、全局異常處理、用戶體驗更友好


結語

掌握前端統一請求(Axios)、本地代理、后端接口權限校驗、響應攔截及全局異常處理等環節,是高效開發現代企業級前后端分離項目的關鍵!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89522.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cartorgapher的編譯與運行

目錄 cartorgapher的編譯環境 cartorgapher的編譯 cartographer的運行 參數的詳解與調參總結 降低延遲與減小計算量 cartorgapher的編譯環境 系統環境 推薦在ubuntu16.04或者18.04上進行編譯 推薦使用剛裝好的ubuntu系統 將ubuntu的軟件源設置成清華的或者其他的中國境內的…

淺談車載電控和機器人一體化關節電控區別和聯系

類別車載電機關節電機&#xff08;伺服電機)電機PMSM 有軸 永磁體內嵌IPMPMSM&BLDC 永磁體表貼 SPM&#xff0c;轉速不高&#xff0c;減少體積 關節和推桿用無框力矩電機&#xff1a;只有定子和轉子&#xff0c;無軸&#xff0c;無外殼和端蓋&#xff0c;便于和編碼器減速器…

【數據結構】堆(下)+ 二叉樹

上期回顧&#xff1a;【數據結構】樹&#xff08;堆&#xff09;上 一.堆的應用 1.1堆排序&#xff08;向下調整在上一期&#xff09; 向上調整算法建堆&#xff1a; 首先先回顧一下向上調整算法 void AdjustUP(HPDataType* arr, int child) {int parent (child - 1) / 2…

Elasticsearch MCP 服務器現已在 AWS Marketplace 上提供

作者&#xff1a;來自 Elastic Udayasimha Theepireddy (Uday), Matt Ryan, Srinivas Pendyala 我們很高興地宣布&#xff0c;Elasticsearch Model Context Protocol&#xff08; MCP &#xff09;服務器現已在 AWS Marketplace 上提供。 使用 MCP 將代理連接到 Elasticsearch …

【Linux】Makefile(一)-介紹

Makefile 本篇博客是作者在學習Linux方面知識過程中&#xff0c;對Makefile片面的了解&#xff0c;從而產生了對Makefile有一個全面的認識的想法&#xff0c;在知道《跟我一起寫Makefile》此書后&#xff0c;作者學習閱讀過程中整理出的筆記。 目錄Makefilemakefile介紹:規則&…

Java爬蟲與正則表達式——用正則來爬取數據

APIJava幫我們寫好的各種功能的Java類。這些Java類統稱為API。正則表達式就是API幫我們寫好的類。正則表達式例子&#xff1a; 字符類&#xff1a;[abc]&#xff1a;只能是a&#xff0c;b或c[^abc]&#xff1a;除了a&#xff0c;b&#xff0c;c之外的任何字符[a-zA-Z]&#xff…

【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ

目錄 1.添加包 2. 連接配置 2.1.連接字符串 2.2.連接對象 3.創建連接服務 3.1.添加配置獲取方法 3.2.服務實現類 3.3.服務接口 4.創建生產者服務 4.1.生產者實現類 4.2.生產者接口 5.創建消費者服務 5.1.消費者服務接口 5.2.消費者接口 6.注冊 7.簡單使用案例 7.1.實現…

Apache SeaTunnel配置使用案例

前置操作 Apache SeaTunnel詳解與部署&#xff08;最新版本2.3.11&#xff09;-CSDN博客 mkdir /usr/local/soft/apache-seatunnel-2.3.11/job/ 一、MySQL to HDFS 官方配置參考&#xff1a; MySQL | Apache SeaTunnel Hdfs文件 | Apache SeaTunnel 1、配置確認 將mysq…

GitCode 使用高頻問題及解決方案

GitCode 作為一款強大的版本控制系統&#xff0c;在軟件開發流程中起著舉足輕重的作用。然而&#xff0c;在使用過程中&#xff0c;開發者們常常會遇到各種各樣的問題。本文將匯總 GitCode 使用中的高頻問題&#xff0c;并提供詳細的解決方案&#xff0c;幫助開發者們更順暢地使…

在FreeBSD系統使用chroot進入Ubuntu仿真環境使用Localsend軟件發送和接受文件

LocalSend是一款非常實用的在不同系統&#xff08;Windows、MacOS、Linux、Android和IOS&#xff09;傳遞文件的程序。我們這次的實踐&#xff0c;就是要在FreeBSD下也能發送和接收文件。 安裝LocalSend 跟在Ubuntu下安裝非常類似&#xff0c;只是不需要下面的第一步&#xf…

交叉熵損失F.cross_entropy在分類模型中的應用

一、核心思想&#xff1a;通過概率分布懲罰錯誤交叉熵損失的本質是&#xff1a; 比較模型預測的概率分布 vs 真實標簽的概率分布&#xff0c;懲罰兩者之間的差異。例如&#xff1a;真實標簽&#xff1a;圖像 0 → 文本 0&#xff08;獨熱編碼 [1, 0, 0, ...]&#xff09;模型預…

測試學習之——Pytest Day3

引言Pytest 作為 Python 中最受歡迎的測試框架之一&#xff0c;以其簡潔的語法、強大的功能和豐富的插件生態系統&#xff0c;極大地提升了自動化測試的效率和可維護性。在本文中&#xff0c;我們將深入探討 Pytest 的兩大核心特性&#xff1a;Fixture 和插件管理&#xff0c;幫…

控制Vue對話框顯示隱藏

正確做法 — 使用 Vue 數據驅動控制顯隱你不需要手動設置 display: block&#xff0c;因為 Element Plus 的 <el-dialog> 是基于 v-model 或 :visible.sync 控制的。&#x1f527; 修改模板部分&#xff1a;將原來的&#xff1a;<el-dialog title"報文詳情"…

直播帶貨與開源AI智能名片鏈動2+1模式S2B2C商城小程序:重塑電商營銷新格局

摘要&#xff1a;本文聚焦于直播帶貨對互聯網供需關系的深刻影響&#xff0c;分析其如何改變傳統電商營銷模式&#xff0c;實現從“人找貨”到“貨找人”的轉變。同時&#xff0c;引入開源AI智能名片鏈動21模式S2B2C商城小程序這一創新概念&#xff0c;探討其在直播帶貨背景下的…

Jmeter 性能測試響應時間過長怎么辦?

當 JMeter 性能測試中出現 響應時間過長 的問題時&#xff0c;需要從 測試腳本、服務器、網絡、JMeter配置 等多方面排查和優化。以下是詳細的解決步驟和思路&#xff1a; B站最新性能進階&#xff0c;學會這些jmeter性能測試技能&#xff0c;更助于正確設計、執行和分析性能測…

COZE官方文檔基礎知識解讀第三期 —— prompt(提示詞)

COZE官方文檔基礎知識解讀第三期 —— prompt&#xff08;提示詞&#xff09; 對于初步接觸PE&#xff08;prompt engineering&#xff09; 的小伙伴們&#xff0c;你們可以去火山方舟提供的prompt工具&#xff0c;用工具&#xff08;其余的prompt網站https://www.promptinggu…

代碼隨想錄算法訓練營第三十二天|動態規劃理論基礎、LeetCode 509. 斐波那契數、70. 爬樓梯、746. 使用最小花費爬樓梯

目錄 LeetCode 509. 斐波那契數 70. 爬樓梯 746. 使用最小花費爬樓梯 感想 文檔講解&#xff1a;代碼隨想錄 動態規劃&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;簡稱DP&#xff0c;如果某一問題有很多重疊子問題&#xff0c;使用動態規劃是最有效的。 …

SpringMVC3

一、JSON 與參數傳遞1.1JSON 是什么- JSON 是字符串&#xff1a;比如 {"name":"zhangsan","password":"123456","age":15} 就是一個 JSON 字符串&#xff0c;它用來在前后端、服務間傳遞數據。- JSON 庫&#xff1a;Fastj…

查看.bin二進制文件的方式(HxD十六進制編輯器的安裝)

文章目錄Windows 系統上安裝 HxD 十六進制編輯器的步驟。**HxD 是一款免費、輕量級的工具&#xff0c;適合查看和編輯 .bin 等二進制文件。****PS:實際安裝過程中會發現找不到Windows11的版本&#xff0c;安裝windows10的即可&#xff0c;并且沒有區別setup版和portable版**安裝…

Linux系統性能優化與監控

系統性能優化與監控是保障 Linux 服務器穩定運行的核心技術&#xff0c;涉及 ??CPU、內存、磁盤 I/O、網絡、進程?? 等多維度的指標分析、問題定位與優化策略。以下從??監控工具與指標??、??常見問題診斷??、??優化方法??三個層面詳細講解&#xff0c;并結合?…