在企业级前后端分离项目开发中(如若依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;并结合​…