ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RuoYi-Vue-Plus 多租户后台管理系统:从入门到部署的完整指南

RuoYi-Vue-Plus 多租户后台管理系统:从入门到部署的完整指南

RuoYi-Vue-Plus 多租户后台管理系统:从入门到部署的完整指南

【免费下载链接】RuoYi-Vue-Plus多租户后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-Token、Mybatis-Plus、WarmFlow、SpringDoc、Hutool、OSS 定期同步项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus

从零写一套管理后台,光权限体系就够喝一壶:登录认证、菜单按钮级授权、按部门隔离数据、敏感字段落库加密,每一块都得自己搭,搭完还得保证多机部署不翻车。RuoYi-Vue-Plus 是一个面向分布式集群场景重写的多租户后台管理系统,把 Sa-Token 权限认证、Mybatis-Plus 数据权限、字段级加密这些企业级能力全部内置,开发者只写业务。它的模块拆得很干净,公共能力都能单独引入别的项目复用。

一分钟速览:RuoYi-Vue-Plus 技术栈

一句话定位:重写 RuoYi-Vue 全部功能、针对分布式集群升级的后端框架(不兼容原框架),后端 6.0.0 版本基于 Spring Boot 4.1.0 + JDK 21。

领域选型作用
核心框架Spring Boot 4.1.0 + JDK 21应用底座,支持虚拟线程开关
Web 容器Jetty(Netty 内核)高性能 HTTP 服务,SSE/WebSocket 友好
权限认证Sa-Token 1.45.0登录、角色/权限校验、JWT 令牌
数据持久层Mybatis-Plus 3.5.17分页、乐观锁、数据权限 SQL 改写
缓存与锁Redisson 4.6.1 + Lock4j分布式缓存、分布式锁
工作流Warm-Flow 1.8.9审批流、转办/委派/会签
定时任务SnailJob 2.0.2分片、重试、DAG 任务流
接口文档SpringDoc 3.0.3基于 JavaDoc 注释零注解生成

项目地图:三大层模块怎么分工

仓库按"入口 / 公共 / 业务"三层切分,配置也按同样思路分层:

  • 入口层ruoyi-admin:唯一可启动的 Web 工程,启动类 DromaraApplication.java 用 BufferingApplicationStartup 记录启动性能。登录相关代码都在这里——AuthController加 Password、Sms、Email、Social、Xcx 五个认证策略实现,前端要加登录方式就在这个包里扩展。
  • 接口层ruoyi-api:跨模块调用只依赖这一层的 DTO 和 Service 接口(UserDTO、WorkflowService 等),避免模块互相注入造成的耦合。
  • 公共能力层ruoyi-common:25 个左右子模块(encrypt、mybatis、redis、satoken、web、push、mcp、liteflow……),每个都是独立可引用的 starter,别的项目直接引 pom 即可复用。
  • 业务层ruoyi-modules:ruoyi-system 系统管理、ruoyi-gen 代码生成、ruoyi-job 调度、ruoyi-workflow 工作流、ruoyi-demo 示例、ruoyi-ai 智能助手。
  • 扩展服务ruoyi-extend:Spring Boot Admin 监控中心、SnailJob Server、Snail AI Server,可独立进程部署。

配置分两层:ruoyi-admin/src/main/resources/application.yml放全局配置(Sa-Token、加解密、XSS、消息推送、Warm-Flow),application-dev.yml/application-prod.yml放环境相关配置(数据源、Redis、邮件、短信),Maven 的 local/dev/prod 三个 profile 决定激活哪个,dev 是默认激活的。

最短上手路径:5 步跑通 RuoYi-Vue-Plus

系统要求:JDK 21、Maven 3.6+、MySQL(compose 用 8.4.9)、Redis(密码必填)。

  1. 克隆仓库:git clone https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus
  2. 建库导入脚本:create database ry-vue,然后依次导入 script/sql/ 下的ry_vue.sql、ry_workflow.sql、ry_job.sql
  3. 改ruoyi-admin/src/main/resources/application-dev.yml:MySQL 账号(默认 root/root)、Redis 密码(默认 ruoyi123)
  4. 打包:./mvnw clean package -DskipTests
  5. 启动:java -jar ruoyi-admin/target/ruoyi-admin.jar,服务跑在 8080 端口,接口文档由 SpringDoc 自动生成

懒人路线:script/docker/docker-compose.yml 一键拉起 MySQL、Redis、MinIO、Nginx、两台 8080/8081 应用节点、监控中心、SnailJob 和 Snail AI 服务。

核心机制拆解:三个值得吃透的实现

Sa-Token 认证鉴权:策略模式换登录方式

解决什么问题:Spring Security 配置繁琐、扩展性差,团队往往在权限体系上重复造轮子。怎么做到的:Sa-Token 承担令牌管理——token-name: Authorization、is-concurrent: true允许同账号并发登录;密码错误超过maxRetryCount: 5次锁定lockTime: 10分钟。登录入口统一走策略模式:SysLoginService按客户端类型分发到五个IAuthStrategy实现,新增"扫码登录"只需加一个实现类。授权侧用注解表达,角色与权限校验支持AND/OR组合表达式,不用手写判断。开发时要注意:给 Controller 方法挂@SaCheckPermission即可控权限;security.excludes里排除的公开路径要自己评估,别把业务接口随手加进去。

字段级加密与接口传输加密:数据落库不打码不够

解决什么问题:手机号、身份证明文落库,请求体在网关日志里裸奔。怎么做到的:字段级——ruoyi-common-encrypt提供@EncryptField注解配合 MyBatis 拦截器,存取数据时自动加解密,AlgorithmType 支持 BASE64、AES、RSA、SM2、SM4 五种算法,mybatis-encryptor配置区设enable: true并填对称密钥或公私钥后启用;接口级——api-decrypt默认enabled: true,每次请求用动态 AES 秘钥加密 body,前端拿encrypt-key头标识协商,RSA 公私钥在配置里完成交换。开发时要注意:默认公私钥是给演示用的,上线前必须换成自己的密钥对,且前后端要同步更换。

数据权限:注解一行搞定按部门隔离

解决什么问题:"只能看本部门数据"这类行级隔离,手写 if 判断容易漏。怎么做到的:PlusDataPermissionInterceptor作为 Mybatis-Plus 拦截器链的第一环,运行时分析并拼接 SQL 实现无感过滤,Mapper 上配置@DataPermission注解条件即可,支持部门、角色之外的自定义维度;确实需要全量数据时可用DataPermissionIgnoreContext显式放行。开发要注意的是:拦截器链顺序是数据权限→分页→乐观锁,自定义 SQL 改写类插件要插在前面,否则会基于未隔离的数据算分页。

工程落地:调优参数与容器化部署

可直接照抄的几个调优点:

  • Jetty 线程:server.jetty.threads.max默认 20000,注释里明确这是虚拟线程开启后的最大并发任务数;SSE、WebSocket 等长连接持续占槽位,按在线用户量和请求峰值调整,别盲目放大。
  • HikariCP 连接池:dev 配置里maxPoolSize: 20、minIdle: 10、connectionTimeout: 30000,JDBC URL 已带rewriteBatchedStatements=true提升批量写入性能,生产按库的 max_connections 反推池大小。
  • JVM:ruoyi-admin/Dockerfile 基于bellsoft/liberica-openjdk-rocky:21.0.12-cds,固定用-XX:+UseZGC -XX:+HeapDumpOnOutOfMemoryError,可追加JAVA_OPTS调堆。
  • 集群部署:compose 里 ruoyi-server1/server2 通过SERVER_PORT=8080/8081区分,SnailJob、Snail AI 端口随2${server.port}、3${server.port}自动漂移,加节点只需复制一份服务改端口;所有服务network_mode: host,跨机部署前先确认端口规划。

踩坑速查:7 个高频问题

  • 连 Redis 报认证失败 → dev 配置强制要密码 → 按真实环境填spring.data.redis.password
  • 配置完全不生效 → profile 默认 dev → 生产用-Pprod打包
  • 加新数据源启动报错 → dynamic-datasource 严格模式匹配不到即抛异常 → 检查数据源名与@DS注解是否一致
  • 多机集群主键冲突 → 主键策略是雪花 ID(ASSIGN_ID)→ 确认多节点主机名/网卡信息不重复
  • 并发上不去、线程占满 → SSE/WebSocket 长连接占用 Jetty 任务槽位 → 调整jetty.threads.max或改短连接超时
  • 富文本保存被拦 → XSS 过滤默认开启 → 参照xss.excludeUrls精准排除接口
  • 接口报解密失败 → 全局接口加密默认开启 → 前端按api-decrypt配置实现加解密并更换密钥对

选型收口

  • 适合谁:要快速交付企业级管理后台的团队;想复用某个公共能力(加密、Excel、推送、MCP)而不自建的项目;多机部署 + 审批流 + 分布式任务是硬需求的场景。
  • 别硬套:只需要单库单机的轻量后台可看官方提到的 Single 精简版思路;对框架二次改造能力不足的团队别动 MybatisPlusConfig 拦截器链,风险高。
  • 下一步:先看 README.md 里与 RuoYi 的差异对照表,再读 application.yml 全文理解每个开关;部署细节以 script/docker/ 为蓝本。

【免费下载链接】RuoYi-Vue-Plus多租户后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-Token、Mybatis-Plus、WarmFlow、SpringDoc、Hutool、OSS 定期同步项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进