# 若依ruoyic++
**Repository Path**: ruoyicpp/ruoyi
## Basic Information
- **Project Name**: 若依ruoyic++
- **Description**: 若依(RuoYi-Vue)管理框架的 C++ 版,基于 Drogon + SQLite/PostgreSQL,内存占用仅 3~40MB,与若依官方前端 100% 兼容
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2026-03-29
- **Last Updated**: 2026-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Cpp, JavaScript, TypeScript, cc, vue3
## README
[English](README_EN.md) | 中文
# RuoYi-Cpp
**RuoYi 管理框架的 C++ 高性能版本**
基于 [Drogon](https://github.com/drogonframework/drogon) + PostgreSQL,与 RuoYi-Vue 前端 100% 兼容
[](LICENSE)
[](https://en.cppreference.com/w/cpp/17)
[](https://github.com/drogonframework/drogon)
[-brightgreen.svg)]()
[](https://gitee.com/y_project/RuoYi-Vue)
[](https://v2.vuejs.org)
[](https://element.eleme.io)
[](https://www.postgresql.org)
[](https://www.sqlite.org)
[](https://github.com/Thalhammer/jwt-cpp)
[](https://www.openssl.org)
[](https://nginx.org)
[](https://min.io)
[](https://datatracker.ietf.org/doc/html/rfc6238)
[]()
---
## 在线演示
🌐 **演示地址**:[https://ruoyi.mymq.site](https://ruoyi.mymq.site)
> 默认账号:`admin` / `admin123`
---
## 项目简介
RuoYi-Cpp 是 [若依(RuoYi-Vue)](https://gitee.com/y_project/RuoYi-Vue) 管理框架的 C++ 高性能版本,后端基于 Drogon 异步 HTTP 框架,数据库使用 PostgreSQL,与原版 RuoYi-Vue 前端保持完全 API 兼容。
> ✅ **平台支持**:已在 **Windows(MSYS2 MinGW64)** 上完整编译验证通过。数据库使用 **SQLite 内嵌模式**(无需安装 PostgreSQL 即可运行),PostgreSQL 作为可选主数据库。
**相比 Java 版本的优势:**
| 对比项 | Java (Spring Boot) | RuoYi-Cpp |
|--------|-------------------|-----------|
| 启动内存 | ~300–500 MB | **~3.2-10 MB** |
| 启动时间 | 5–15 秒 | **< 1 秒** |
| 运行时依赖 | JDK 17+ | 无(静态链接) |
| 部署方式 | JAR + JVM | **单个可执行文件** |
| 适用场景 | 云服务器 | 云服务器 / NAS / 嵌入式 |
| Nginx 依赖 | **可选** | **可选**(内置前端托管)|
---
## 功能模块
### 系统管理
| 模块 | API 路由 | 功能说明 |
|------|---------|---------|
| 用户管理 | `GET/POST/PUT/DELETE /system/user` | 增删改查、重置密码、CSV 导入导出、角色/岗位分配 |
| 角色管理 | `GET/POST/PUT/DELETE /system/role` | 增删改查、菜单权限分配、数据权限、用户授权 |
| 菜单管理 | `GET/POST/PUT/DELETE /system/menu` | 增删改查、动态路由树构建 |
| 部门管理 | `GET/POST/PUT/DELETE /system/dept` | 树形结构增删改查 |
| 岗位管理 | `GET/POST/PUT/DELETE /system/post` | 增删改查 |
| 参数配置 | `GET/POST/PUT/DELETE /system/config` | 系统参数 CRUD + 缓存刷新 |
| 字典管理 | `GET/POST/PUT/DELETE /system/dict` | 字典类型 + 字典数据 CRUD |
| 通知公告 | `GET/POST/PUT/DELETE /system/notice` | 公告 CRUD + 已读状态 |
| 邮件配置 | `GET/POST /system/emailConfig` | SMTP 发件箱配置 + 测试发送 |
| 两步验证 | `POST /system/totp/*` | Google Authenticator TOTP 绑定/解绑 |
| 第三方登录 | `GET /oauth2/authorize/{p}` | GitHub / Google / 企业微信 / 钉钉 / 飞书 / QQ OAuth2 |
| 第三方回调 | `GET /oauth2/callback/{p}` | code → JWT,首次自动建号 |
| 第三方绑定 | `POST/DELETE /oauth2/bind/{p}` | 已登录账号绑定/解绑第三方 |
### 系统监控
| 模块 | API 路由 | 功能说明 |
|------|---------|---------|
| 操作日志 | `GET/DELETE /monitor/operlog` | 查询 / 删除 / 清空 / 导出 |
| 登录日志 | `GET/DELETE /monitor/logininfor` | 查询 / 删除 / 解锁账户 |
| 在线用户 | `GET/DELETE /monitor/online` | 查看在线会话 / 强制下线 |
| 定时任务 | `GET/POST/PUT/DELETE /monitor/job` | CRUD + 立即执行 + 暂停/恢复 + 执行日志 |
| 系统日志 | `GET /monitor/logfile` | 实时查看 `.log`/`.jsonl` 日志文件,支持删除 |
| 服务监控 | `GET /monitor/server` | CPU、内存、磁盘、系统信息、GPU VRAM |
| 缓存监控 | `GET /monitor/cache` | 查看缓存分类和键值 |
| 数据源监控 | `GET /monitor/druid` | DB 连接池状态、查询统计 |
| 重启服务 | `POST /monitor/restart/confirm` | 管理员确认重启后端进程(内置 HTML 管理页,无需 Vue 组件)|
### 账号自助
| 功能 | API 路由 | 说明 |
|------|---------|-----|
| 登录 | `POST /login` | 用户名 + 密码 + 验证码,返回 JWT |
| LDAP 登录 | `POST /login` | 配置 `ldap.enabled=true` 后自动走 AD/LDAP 认证 |
| 注册 | `POST /register` | 自助注册,支持邮箱验证码 |
| 忘记密码 | `POST /forgotPassword` | 通过邮箱发送重置验证码 |
| 重置密码 | `POST /resetPassword` | 凭重置令牌更新密码 |
| 发送验证码 | `POST /sendRegCode` | 注册前验证邮箱有效性 |
### 运维与可观测性
| 端点 | 方法 | 说明 |
|------|------|-----|
| `/actuator/health` | GET | 健康检查,JSON 格式 |
| `/actuator/metrics` | GET | Prometheus 文本格式指标(直接接 Grafana)|
| `/actuator/db` | GET | 数据库状态:后端类型、连接状态、待同步队列 |
| `/actuator/info` | GET | 应用信息 |
| `/actuator/reload` | POST | 热重载 `config.json`(无需重启)|
| `/swagger-ui/` | GET | Swagger UI API 文档 |
| `/v3/api-docs` | GET | OpenAPI 3.0 JSON 描述 |
---
## 技术栈
| 组件 | 技术 |
|------|-----|
| HTTP 框架 | [Drogon](https://github.com/drogonframework/drogon) (C++17, 异步非阻塞) |
| 主数据库 | PostgreSQL (libpq 直连 + 连接池) |
| 备用数据库 | SQLite(自动降级,PG 恢复后自动同步回写)|
| 缓存层 | 进程内 MemCache / GPU VramCache / Redis(三级可选)|
| 文件存储 | 本地磁盘(默认)/ MinIO / AWS S3(AWS SigV4 签名)|
| 认证 | JWT([jwt-cpp](https://github.com/Thalhammer/jwt-cpp)),PBKDF2-SHA256 密码哈希 |
| 两步验证 | TOTP RFC 6238(Google Authenticator,纯 OpenSSL 实现)|
| 第三方登录 | OAuth2:GitHub / Google / 企业微信 / 钉钉 / 飞书 / QQ,CSRF-state 防护 |
| LDAP/AD | OpenLDAP CLI 集成(Linux),Windows 预留接口 |
| 密钥管理 | HashiCorp Vault(自动启动 / 解封 / 密钥注入)|
| 邮件发送 | OpenSSL Implicit-TLS SMTP(QQ/163/企业邮箱,多发件人轮转)|
| 前端 | RuoYi-Vue(Vue 2 + Element UI),Drogon **内置托管**,无需 Nginx |
| 反向代理 | Nginx(可选,项目内置启动管理,自动生成 upstream.conf)|
| 日志 | JSON 结构化日志(`.jsonl`,每行一个 JSON 对象,可接 ELK)|
| 可观测 | Prometheus 指标端点、X-Request-ID 全链路追踪 |
| 安全 | 请求签名验证、IP 限流、XSS 过滤、设备绑定、许可证管理 |
---
## 快速开始
### 前置依赖
**数据库**:需要运行中的 PostgreSQL 实例(版本 12+)
```sql
-- 创建数据库(首次运行自动建表,无需手动导入 SQL)
CREATE DATABASE "ruoyi.c";
```
**Redis**(可选):不配置时自动退化为进程内缓存。
---
### Windows(MSYS2 MinGW64)
**1. 安装 MSYS2 依赖**
```bash
pacman -S --needed \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-ninja \
mingw-w64-x86_64-openssl \
mingw-w64-x86_64-jsoncpp \
mingw-w64-x86_64-zlib \
mingw-w64-x86_64-postgresql \
mingw-w64-x86_64-brotli \
mingw-w64-x86_64-c-ares \
mingw-w64-x86_64-libuuid \
mingw-w64-x86_64-hiredis
```
**2. 编译安装 Drogon**
```bash
git clone https://github.com/drogonframework/drogon
cd drogon && git submodule update --init
mkdir build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_REDIS=ON \
-DBUILD_MYSQL=OFF \
-DBUILD_SQLITE=OFF \
-DBUILD_POSTGRESQL=ON
ninja && ninja install
```
**3. 安装 jwt-cpp(Header-Only)**
```bash
git clone https://github.com/Thalhammer/jwt-cpp
cp -r jwt-cpp/include/jwt-cpp /mingw64/include/
```
**4. 编译项目**
```bash
git clone https://gitee.com/ruoyicpp/ruoyi ruoyi-cpp
cd ruoyi-cpp && mkdir build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/mingw64
ninja
```
**5. 配置并运行**
```bash
# 编辑 config.json(数据库连接、JWT 密钥等)
# 首次运行自动建表 + 插入初始数据
./ruoyi-cpp.exe
```
---
## 配置说明
主配置文件:`config.json`(参考 `config.bat.template.json`)
### 核心配置
```jsonc
{
"listeners": [{ "address": "0.0.0.0", "port": 18080, "https": false }],
"database": {
"host": "127.0.0.1", "port": 5432,
"dbname": "ruoyi.c", "user": "postgres", "passwd": ""
},
"jwt": {
"secret": "至少16位随机字符串", // ⚠️ 生产环境必须修改
"expire_minutes": 30,
"jwt_expire_days": 7
}
}
```
### 文件存储(默认本地,可选 MinIO/S3)
```jsonc
"storage": {
"type": "local", // "local" | "minio" | "s3"
"local_path": "./upload", // type=local 时生效
"endpoint": "http://127.0.0.1:9000", // MinIO/S3 endpoint
"bucket": "ruoyi",
"access_key": "minioadmin",
"secret_key": "minioadmin",
"region": "us-east-1",
"public_url": "" // 对外 CDN 地址,空则用 endpoint
}
```
### LDAP/Active Directory
```jsonc
"ldap": {
"enabled": false,
"host": "192.168.1.100",
"port": 389,
"base_dn": "DC=example,DC=com",
"bind_dn": "CN=svc_ruoyi,OU=Service Accounts,DC=example,DC=com",
"bind_pass": "service_password",
"user_filter": "(&(objectClass=person)(sAMAccountName={username}))",
"fallback_local": true // LDAP 失败时允许本地账号登录
}
```
### 两步验证(TOTP)
```jsonc
"totp": {
"enabled": true,
"issuer": "RuoYi-Cpp" // 显示在 Authenticator App 中的名称
}
```
> TOTP 使用流程:调用 `POST /system/totp/generate` 获取 `qrUri`,用前端 qrcode.js 渲染二维码,用户用 Google/Microsoft Authenticator 扫码,然后调用 `POST /system/totp/enable` 输入 6 位码激活。
### 第三方登录(OAuth2)
```jsonc
"oauth2": {
"github": {
"enabled": true,
"client_id": "YOUR_GITHUB_CLIENT_ID",
"client_secret": "YOUR_GITHUB_CLIENT_SECRET",
"redirect_uri": "http://yourdomain/oauth2/callback/github",
"scope": "user:email"
},
"google": { "enabled": false, ... }, // 同结构,scope: "openid email profile"
"wechat_work": { // 企业微信需额外 corp_id / agent_id
"enabled": false,
"corp_id": "YOUR_CORP_ID",
"client_secret": "YOUR_CORP_SECRET",
"agent_id": "YOUR_AGENT_ID",
"redirect_uri": "http://yourdomain/oauth2/callback/wechat_work"
},
"dingtalk": { "enabled": false, ... }, // client_id = AppKey
"feishu": { "enabled": false, ... }, // client_id = App ID
"qq": { "enabled": false, ... } // client_id = App ID
}
```
**OAuth2 登录完整流程:**
1. 前端调 `GET /oauth2/providers` 获取已启用 provider 列表
2. 前端调 `GET /oauth2/authorize/{provider}` 获取 `{url, state}`
3. 前端跳转到 `url`(provider 授权页)
4. 用户授权后 provider 重定向到 `redirect_uri`(即 `GET /oauth2/callback/{provider}?code=xxx&state=xxx`)
5. 后端验证 state(防 CSRF)→ 用 code 换 access_token → 获取用户信息 → 签发 JWT
6. 首次登录自动创建本地账号(`{provider}_{openId前16位}`)
7. 已登录用户可通过 `POST /oauth2/bind/{provider}` 绑定现有账号
> **安全提示**:state 通过 `MemCache` 存储 60s 自动过期,杜绝 CSRF 攻击。
### 前端内置托管(无需 Nginx)
```jsonc
"frontend": {
"enabled": true,
"dist_path": "./web", // Vue dist 目录
"spa_mode": true, // SPA history 模式回退
"api_prefix": "/prod-api", // 自动剥离该前缀转发到后端
"cache_seconds": 3600
}
```
> 将 `npm run build:prod` 生成的 `dist/` 内容放到 `./web/` 目录,直接访问 `:18080` 即可,无需 Nginx。
### 邮件配置(系统内配置)
登录后进入 **系统管理 → 邮件发件箱** 配置 SMTP,无需修改配置文件:
| 参数键 | 说明 | 示例值 |
|--------|-----|--------|
| `sys.email.host` | SMTP 服务器 | `smtp.qq.com` |
| `sys.email.port` | 端口(Implicit TLS)| `465` |
| `sys.email.fromName` | 发件人显示名 | `系统通知` |
| `sys.email.senders` | 发件人列表(JSON 数组)| `[{"email":"a@qq.com","authCode":"xxxx"}]` |
---
## 项目结构
```
ruoyi-cpp/
├── config.json # 主配置文件(参考 config.bat.template.json)
├── web/ # 前端 dist 目录(放这里即可,无需 Nginx)
├── logs/ # 日志目录(.log 文本 + .jsonl 结构化)
├── upload/ # 本地上传文件目录
├── src/
│ ├── main.cc # 入口:中间件注册、服务初始化
│ ├── AppIncludes.h # 全局集中 include
│ ├── common/
│ │ ├── AjaxResult.h # 统一 JSON 响应体
│ │ ├── DatabaseInit.cc # 自动建表 + 初始数据 + Schema 迁移
│ │ ├── JwtUtils.h # JWT 生成/解析
│ │ ├── JsonLogger.h # JSON 结构化日志(覆盖 Drogon 输出)
│ │ ├── RequestTracing.h # X-Request-ID 链路追踪中间件
│ │ ├── DataMaskUtils.h # 手机/身份证/银行卡/邮箱脱敏
│ │ ├── MetricsCollector.h # Prometheus 指标 + ActuatorCtrl
│ │ ├── TotpUtils.h # TOTP RFC 6238(Google Authenticator)
│ │ ├── OAuth2Manager.h # 第三方登录:GitHub/Google/企业微信/钉钉/飞书/QQ
│ │ ├── HotConfig.h # 配置文件热重载(5s 轮询)
│ │ ├── LdapAuth.h # LDAP/Active Directory 认证
│ │ ├── FrontendHost.h # Drogon 内置前端托管 + SPA 回退
│ │ ├── RateLimiter.h # IP 限流
│ │ ├── XssUtils.h # XSS 过滤 + SQL 注入检测
│ │ ├── SignUtils.h # API 请求签名验证
│ │ ├── SslManager.h # SSL 证书管理
│ │ ├── LicenseManager.h # 软件许可证管理
│ │ ├── DeviceBinding.h # 设备绑定(硬件指纹)
│ │ ├── SmtpUtils.h # SMTP 邮件发送(OpenSSL Implicit-TLS)
│ │ ├── MonitorManager.h # 崩溃/重启告警
│ │ ├── CrashHandler.h # 崩溃捕获(SEH/VEH/terminate)
│ │ └── ColorLogger.h # 控制台彩色日志
│ ├── filters/
│ │ ├── JwtAuthFilter.h # JWT 认证中间件(HttpMiddleware)
│ │ └── PermFilter.h # 权限检查宏 CHECK_PERM
│ ├── services/
│ │ ├── DatabaseService.h # PostgreSQL(池) + SQLite 双写/自动降级
│ │ ├── StorageService.h # 文件存储:本地/MinIO/S3(SigV4)
│ │ ├── VaultManager.h # HashiCorp Vault 集成
│ │ ├── NginxManager.h # Nginx 子进程管理
│ │ └── ... # KoboldCpp/Whisper/DDNS 等扩展服务
│ ├── system/
│ │ ├── services/
│ │ │ ├── TokenService.h # Token 创建/刷新/删除
│ │ │ ├── SysConfigService.h # 系统参数(带缓存)
│ │ │ ├── SysDictService.h # 字典缓存
│ │ │ └── SysMenuService.h # 菜单树/路由构建
│ │ └── controllers/
│ │ ├── SysLoginCtrl.h # 登录/注册/忘记密码/路由
│ │ ├── SysUserCtrl.h # 用户管理
│ │ ├── SysRoleCtrl.h # 角色管理(实时权限刷新)
│ │ ├── SysTotpCtrl.h # TOTP 两步验证 API
│ │ ├── OAuth2Ctrl.h # 第三方登录:授权/回调/绑定/解绑
│ │ └── ... # 菜单/部门/字典/公告等
│ └── monitor/
│ ├── JobScheduler.h # Cron 调度引擎(支持秒级 cron 表达式)
│ └── controllers/
│ ├── SysLogFileCtrl.h # 系统日志文件查看器
│ ├── SysJobCtrl.h # 定时任务管理
│ ├── ServerCtrl.h # 服务器监控
│ ├── DruidCtrl.h # 数据库连接池监控
│ ├── SysRestartCtrl.h # 重启后端服务(内置 HTML 管理页,admin 鉴权)
│ └── ... # 操作日志/登录日志/在线用户
└── ui/ # 前端源码(Vue 2 + Element UI)
```
---
## 权限设计
- **超级管理员**(`user_id=1`):拥有所有权限,不受 RBAC 限制
- **普通用户**:通过 `sys_user_role` 关联角色,角色关联菜单权限
- **菜单权限字符**:如 `system:user:list`,在 `CHECK_PERM` 宏中自动校验
- **角色权限实时生效**:修改角色菜单后,**无需在线用户重新登录**,后端自动刷新 Token 权限缓存和路由缓存
### 注册用户权限
通过系统参数 `sys.account.initRoleId` 控制:
| 参数值 | 效果 |
|--------|-----|
| 空(默认) | 注册后无角色,管理员手动分配 |
| 角色 ID(如 `2`) | 注册后自动分配指定角色 |
---
## 默认账号
| 用户名 | 密码 | 说明 |
|--------|------|-----|
| `admin` | `admin123` | 超级管理员,拥有全部权限 |
> ⚠️ **生产环境请立即修改默认密码!**
密码使用 OpenSSL PBKDF2-SHA256(10000 轮)存储,bcrypt 可选。
---
## 用户批量导入
支持通过 CSV 文件批量导入用户(**系统管理 → 用户管理 → 导入**):
1. 点击"下载模板"获取 CSV 格式模板
2. 按模板填写用户数据(默认密码 `123456`)
3. 勾选"是否更新"可覆盖已有账号
4. 上传 CSV 文件,支持 UTF-8(含 BOM)编码
CSV 列格式:`登录账号, 用户昵称, 部门编号, 手机号码, 邮箱, 性别(0/1/2), 状态(0/1)`
---
## 前端说明
**前端直接使用若依官方源码:**
```bash
# 克隆若依官方前端
git clone https://gitee.com/y_project/RuoYi-Vue.git
cd RuoYi-Vue
# 修改 .env.development 中的后端地址
VUE_APP_BASE_API = 'http://127.0.0.1:18080'
# 安装依赖并启动
npm install
npm run dev
```
生产部署时将 `npm run build:prod` 生成的 `dist/` 目录部署到 Nginx 即可,后端地址指向本项目的监听端口(默认 `18080`)。
**Nginx 伪静态 + 反向代理配置:**
```nginx
# Vue 路由 history 模式伪静态
location / {
try_files $uri $uri/ /index.html;
}
# 后端 API 代理(对应前端 VUE_APP_BASE_API = '/prod-api')
location /prod-api/ {
proxy_pass http://127.0.0.1:18080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# WebSocket 通知
location /ws/ {
proxy_pass http://127.0.0.1:18080/ws/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 3600s;
}
```
---
## 与原版 RuoYi-Vue 的兼容性
- ✅ 所有 `/system/**`、`/monitor/**` API 路由与原版完全一致
- ✅ JWT Token 格式、`getInfo`、`getRouters` 响应结构完全兼容
- ✅ 直接克隆[若依官方前端](https://gitee.com/y_project/RuoYi-Vue),只改后端地址即可运行
- ➕ 新增:邮件发件箱管理、忘记密码、注册邮箱验证码、消息通知中心、API Key 管理、操作审计增强等功能
---
## 常见问题
**Q:启动报 `cannot connect to database`?**
> 检查 `config.json` 中 `database.host/port/dbname/user/passwd` 是否正确,确认 PostgreSQL 服务已启动。使用 SQLite 模式时保持 `host` 为空即可。
**Q:登录提示验证码错误?**
> 确认 `captcha.enabled` 为 `true`,且系统时间正确(验证码有 120 秒有效期)。
**Q:前端跨域报错?**
> 开发模式下检查 `vue.config.js` 中 `devServer.proxy` 的目标地址是否指向正确的后端端口(默认 `18080`)。生产环境检查 Nginx `/prod-api/` 代理配置。
**Q:JWT secret 为空能启动吗?**
> 可以启动,但所有 Token 将使用空密钥签发,**存在严重安全风险**,生产环境务必填写强随机密钥。
**Q:角色权限修改后不生效?**
> 后端会自动刷新在线用户的权限缓存,若仍不生效请检查 `MemCache` / Redis 连接是否正常。
---
## 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库:
2. 新建分支:`git checkout -b feat/your-feature`
3. 提交代码:`git commit -m "feat: 描述你的改动"`
4. 推送分支:`git push origin feat/your-feature`
5. 发起 Pull Request
**代码规范**:
- C++ 代码遵循项目现有风格(头文件实现、Drogon 异步回调)
- 新增接口需同时提供权限字符串(如 `system:user:add`)
- 敏感信息不得硬编码,通过 `config.json` 或数据库配置
---
## 安全注意事项
| 项目 | 说明 |
|------|-----|
| JWT Secret | 必须 ≥16 位随机字符串,生产环境请用 `/dev/urandom` 生成 |
| 默认密码 | 首次运行后立即修改 `admin` 的 `admin123` 默认密码 |
| TOTP | 管理员账号建议强制开启,防止密码泄露后被入侵 |
| LDAP bind_pass | 建议通过 Vault 注入,不要明文写入 `config.json` |
| MinIO secret_key | 同上,Vault 注入 |
| OAuth2 client_secret | 同上,Vault 注入;生产环境不得明文存入 `config.json` |
| OAuth2 redirect_uri | 必须与 provider 控制台配置完全一致,防止 open redirect |
| `/actuator/*` | 建议在 Nginx/防火墙层限制只允许内网访问 |
| 数据脱敏 | `DataMaskUtils::maskJsonValue()` 可在日志/响应中自动脱敏敏感字段 |
---
## 更新日志
### v1.2.1(当前)
- **重启服务管理页**:`GET /monitor/restart` 纯后端渲染 HTML 页面,管理员可查询在线人数后二次确认重启后端进程;token 从同源 iframe 的 `sessionStorage` 自动读取,无需 Vue 组件
- **修复 HTTP_HIDE 生产 404 Bug**:`SysRestartCtrl` 原 `HTTP_HIDE` 宏在 Release 构建下将重启接口全部返回 404,已移除
- **消息通知中心**(f15):钉钉 / 飞书 / 企业微信 Webhook(HMAC-SHA256 签名)+ 站内消息,`/system/notify/channel/**` + `/system/message/**`
- **API Key 管理**(f16):`/system/apikey/**` CRUD,48 位随机 Key,`X-API-Key` 请求头或 `?apiKey=` 查询参数鉴权
- **操作审计增强**(f17):`sys_oper_log` 新增 `before_data`/`after_data` 字段,`diffJson()` 只记录变更字段,`LOG_AUDIT` / `LOG_AUDIT_TIMED` 宏
### v1.2.0
- **OAuth2 第三方登录**:GitHub / Google / 企业微信 / 钉钉 / 飞书 / QQ,state CSRF 防护,首次自动建号,已有账号可绑定/解绑(`sys_user_oauth` 表)
- **TOTP 两步验证**:Google/Microsoft Authenticator,RFC 6238 纯 OpenSSL 实现
- **LDAP/AD 认证**:企业内网统一登录,支持 `fallback_local`
- **文件存储分层**:本地磁盘默认,`config.json` 切换 MinIO/S3(AWS SigV4 签名)
- **配置热重载**:`HotConfig` 5s 轮询文件变化自动生效,或调 `POST /actuator/reload`
- **Prometheus 指标**:`/actuator/metrics`(QPS/延迟/DB 状态),兼容 Grafana
- **数据脱敏工具**:手机、身份证、银行卡、邮箱、姓名自动脱敏
- **X-Request-ID 链路追踪**:全请求自动生成/传递
- **系统日志查看器**:前端 iframe 内嵌,支持查看 `.log`/`.jsonl`,实时刷新
- **DB 连接池监控**:`/actuator/db` 展示 PG/SQLite 状态、待同步队列
- **热升级 TOTP 字段**:`ALTER TABLE IF NOT EXISTS` 无损迁移
### v1.1.0
- **Drogon 内置前端托管**:`/prod-api` 前缀自动剥离,SPA history 模式回退,无需 Nginx
- **系统日志查看器后端页面**:`GET /monitor/logfile/page`,通过 iframe 嵌入前端
- **JSON 结构化日志**:`JsonLogger` 将 trantor 文本日志转为 NDJSON(`.jsonl`)
- **SQLite 默认兼容**:`DEFAULT NOW()` → `CURRENT_TIMESTAMP`
### v1.0.0
- 完整实现 RuoYi-Vue 所有系统管理、系统监控 API
- PostgreSQL + SQLite 自动降级双写,PG 恢复后自动同步回写
- PBKDF2-SHA256 密码哈希、JWT 自动续期、Token 黑名单
- HashiCorp Vault 密钥管理(自动启动/解封/注入)
- 邮件发件箱管理(OpenSSL Implicit-TLS SMTP,多发件人轮转)
- 忘记密码 / 注册邮箱验证码
- WebSocket 实时通知(一次性 ticket 鉴权)
- IP 限流、Bot UA 拦截、XSS/SQL 注入过滤、CORS 配置
- 请求签名验证(`SignUtils`)
- 设备绑定(硬件指纹 + Vault 密钥)
- 许可证管理(文件签名 + 功能开关)
- GPU VRAM 缓存(可选 CUDA)
- Cron 定时任务调度引擎(秒级,DB 持久化)
- 集群模式(主/从角色,自动生成 Nginx upstream.conf)
- 崩溃捕获(SEH/VEH + Minidump,Windows)
- 角色权限修改实时生效,无需重新登录
---
## 交流群
QQ 交流群:**7827982393**
广州市八股文科技官网:
八股文题库平台:
---
## 开源协议
本项目基于 [MIT License](LICENSE) 开源。
RuoYi-Vue 原项目版权归 [若依团队](https://gitee.com/y_project/RuoYi-Vue) 所有,遵循 MIT 协议。