You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 数字人民币教学仿真后端
开发规范与模块目录约定见 [开发规范 ](docs/DEVELOPMENT_GUIDE.md )。
## 运行环境
- JDK 8( 已按 Temurin 8 验证)
- Spring Boot 2.7.18、Spring Security 5.7、MyBatis-Plus 3.5.17、Springdoc 1.8.0
- MySQL 8
## 登录方式
- 主平台单点登录:主平台跳转至 `GET /api/v1/auth/sso?token=...` 。后端以主平台教师或学生档案的 `add_time` 动态 HMAC 密钥验证 Token, 生成一次性 `code` 并跳转至前端回调地址。
- 独立访问:浏览器访问 `GET /api/v1/auth/cas/login` ,跳转学校 CAS; 回调校验成功后生成同样的一次性 `code` 。
- 本地账号密码:`POST /api/v1/auth/login` 仅校验本系统保存的 BCrypt 密码哈希。数据库迁移内置学生账号 `tzs001` ; SSO/CAS 仅同步身份与角色,不读取主平台密码。
- 会话兑换:`POST /api/v1/auth/session/exchange`,请求体为 `{"code":"..."}` ,返回本系统访问 JWT 和刷新令牌。
本系统只接受教师和学生两类身份。平台账号与角色只能通过内部投影写入;没有用户、角色或用户角色的管理接口。
## 必需配置
生产环境通过环境变量配置:
| 变量 | 说明 |
| --- | --- |
| `DIGITAL_RMB_DB_URL` | 本系统 MySQL JDBC 地址 |
| `DIGITAL_RMB_DB_USERNAME` | 本系统数据库账号 |
| `DIGITAL_RMB_DB_PASSWORD` | 本系统数据库密码 |
| `DIGITAL_RMB_JWT_SECRET` | 至少 64 字符的应用 JWT 密钥 |
| `DIGITAL_RMB_PLATFORM_DB_URL` | 主平台 MySQL JDBC 地址 |
| `DIGITAL_RMB_PLATFORM_DB_USERNAME` | 主平台只读数据库账号 |
| `DIGITAL_RMB_PLATFORM_DB_PASSWORD` | 主平台只读数据库密码 |
| `DIGITAL_RMB_CAS_LOGIN_URL` | 学校 CAS 登录地址 |
| `DIGITAL_RMB_CAS_VALIDATE_URL` | CAS `serviceValidate` 地址 |
| `DIGITAL_RMB_CAS_CALLBACK_URL` | 本系统固定 CAS 回调地址 |
| `DIGITAL_RMB_FRONTEND_CALLBACK_URL` | 前端接收一次性 code 的固定回调地址 |
主平台数据库账号必须仅授予 `SELECT` 权限。不要将主平台 Token 写入日志、数据库或前端最终 URL。
## 本地运行
```powershell
mvn spring-boot : run -Dspring-boot . run . profiles = local -Dspring-boot . run . arguments =- -server . port = 8081
```
本地 Swagger: < http: // localhost:8081 / swagger-ui / index . html >
首次启动时, Flyway V3 迁移会创建或更新 `tzs001` (平台用户 ID `487` 、`STUDENT`)。迁移文件只保存 BCrypt 哈希,不含密码明文。新 SSO/CAS 用户会获得随机 BCrypt 密码;如需为其开通本地密码登录,必须通过后续受控的本地账号初始化流程完成。