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(密码必填)。
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus - 建库导入脚本:
create database ry-vue,然后依次导入 script/sql/ 下的ry_vue.sql、ry_workflow.sql、ry_job.sql - 改
ruoyi-admin/src/main/resources/application-dev.yml:MySQL 账号(默认 root/root)、Redis 密码(默认 ruoyi123) - 打包:
./mvnw clean package -DskipTests - 启动:
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),仅供参考