# 数字人民币教学仿真后端 开发规范与模块目录约定见 [开发规范](docs/DEVELOPMENT_GUIDE.md)。 ## 运行环境 - JDK 8(已按 Temurin 8 验证) - Spring Boot 2.7.18、Spring Security 5.7、MyBatis-Plus 3.5.17、Knife4j 4.4.0 - MySQL 8 ## 登录方式 - 兼容综合实训平台登录:`POST /api/user/login`。 - 账号密码登录参数:`username`、`passwordEncode`。 - Token 单点登录参数:`TOKEN`。接口解析智云 HS256 Token,同步本地用户并直接返回本系统访问 Token。 - 原有主平台跳转登录:`GET /api/v1/auth/sso?token=...`,验证成功后携带本系统 Token 跳转前端回调地址。 - 本地账号密码:`POST /api/v1/auth/login` 请求体为 `{"studentId":"tzs001","password":"123qwe"}`,按 `sys_user.student_id` 查询并校验本系统保存的 BCrypt 密码哈希。旧字段 `username` 暂时作为兼容别名。 Token 单点登录中的平台 `userId` 保存为 `sys_user.zy_user_id`;本地 `sys_user.user_id` 始终使用 UUID 主键。本系统只接受管理员、教师和学生角色。 ## 必需配置 生产环境通过环境变量配置: | 变量 | 说明 | | --- | --- | | `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: ## 数字货币发行实验模块 学生携带有效 JWT 可操作商业银行端和中央银行端;接口不区分教师、学生角色。 - 商业银行端:`/api/v1/commercial-banks/issuance`,包含库存查询、发行申请创建与更新、待签名原文、SM3 摘要、SM2 签名、报文封装和发送。 - 中央银行端:`/api/v1/central-banks/issuance/requests/{id}`,只读返回请求接收状态、接收时间和请求报文。 - 启动测试库配置:`mvn spring-boot:run -Dspring-boot.run.profiles=dev`。 - Swagger 接口说明按“数字货币发行模块 - 商业银行端”和“数字货币发行模块 - 中央银行端”分组,使用中文 UTF-8 文本。 测试环境会执行 `schema.sql`,创建或更新测试账号 `tzs001`。`dev` 配置的 `spring.sql.init.mode` 为 `never`,不会自动修改真实 MySQL;开发库必须已有 `sys_user` 记录,并且 `password` 必须保存 BCrypt 哈希,不能保存密码明文。