feat: 增强输入验证和安全防护

- 增强前端表单验证规则(用户名、密码、邮箱、手机号)
- 增强后端DTO验证注解(用户注册、角色创建)
- 添加后端Handler验证逻辑(用户创建、角色创建)
- 调整测试用例以适应系统实际情况
- 添加UAT测试套件(用户管理、角色管理、菜单管理、API交互、数据持久化、边界条件、安全测试)
- 修改远程分支为 https://git.f.novalon.cn/novalon/novalon-manage-system.git
This commit is contained in:
张翔
2026-03-27 21:31:30 +08:00
parent a05368d306
commit 24422c2c19
31 changed files with 1205 additions and 139 deletions
+89 -1
View File
@@ -23,8 +23,9 @@ novalon-manage-system/
## 技术栈
### 后端
- Java 21
- Spring Boot 3.5.12
- Spring Boot 3.5.13
- Spring Cloud Gateway
- Spring Security + JWT
- R2DBC (响应式数据库访问)
@@ -32,6 +33,7 @@ novalon-manage-system/
- Flyway (数据库迁移)
### 前端
- Vue 3 + TypeScript
- Element Plus
- Pinia (状态管理)
@@ -45,28 +47,33 @@ novalon-manage-system/
使用 Docker Compose 可以一键启动所有服务,包括数据库、后端和前端。
#### 前置要求
- Docker 20.10+
- Docker Compose 2.0+
#### 启动步骤
1. **克隆项目**
```bash
git clone <repository-url>
cd novalon-manage-system
```
2. **启动所有服务**
```bash
docker-compose up -d
```
3. **查看服务状态**
```bash
docker-compose ps
```
4. **查看日志**
```bash
# 查看所有服务日志
docker-compose logs -f
@@ -78,17 +85,20 @@ docker-compose logs -f frontend
```
5. **访问应用**
- 前端应用: http://localhost:3001
- 后端 API: http://localhost:8084
- API 文档: http://localhost:8084/swagger-ui.html
- 健康检查: http://localhost:8084/actuator/health
#### 停止服务
```bash
docker-compose down
```
#### 清理数据(包括数据库数据)
```bash
docker-compose down -v
```
@@ -98,6 +108,7 @@ docker-compose down -v
#### 1. 环境准备要求
##### 必需软件
- **Java**: JDK 21 或更高版本
- **Maven**: 3.8+ (用于后端构建)
- **Node.js**: 18+ (用于前端构建)
@@ -106,10 +117,12 @@ docker-compose down -v
- **Git**: 版本控制
##### 可选软件
- **Docker**: 用于容器化部署
- **IDE**: IntelliJ IDEA (推荐) 或 VS Code
##### 系统要求
- **操作系统**: macOS, Linux, Windows
- **内存**: 最低 4GB,推荐 8GB+
- **磁盘空间**: 最低 2GB 可用空间
@@ -119,6 +132,7 @@ docker-compose down -v
##### 2.1 安装 Java 和 Maven
**macOS (使用 Homebrew)**:
```bash
brew install openjdk@21
brew install maven
@@ -134,6 +148,7 @@ mvn -version
```
**Linux (Ubuntu/Debian)**:
```bash
# 安装 OpenJDK 21
sudo apt update
@@ -148,6 +163,7 @@ mvn -version
```
**Windows**:
1. 下载并安装 JDK 21: https://adoptium.net/
2. 下载并安装 Maven: https://maven.apache.org/download.cgi
3. 设置环境变量:
@@ -158,6 +174,7 @@ mvn -version
##### 2.2 安装 Node.js 和 pnpm
**使用 nvm (推荐)**:
```bash
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
@@ -178,14 +195,17 @@ pnpm -v
```
**macOS (使用 Homebrew)**:
```bash
brew install node
npm install -g pnpm
```
**Windows**:
1. 下载并安装 Node.js: https://nodejs.org/
2. 安装 pnpm:
```powershell
npm install -g pnpm
```
@@ -193,6 +213,7 @@ npm install -g pnpm
##### 2.3 安装 PostgreSQL
**macOS (使用 Homebrew)**:
```bash
brew install postgresql@15
brew services start postgresql@15
@@ -202,6 +223,7 @@ psql postgres
```
在 psql 中执行:
```sql
CREATE DATABASE manage_system;
CREATE USER novalon WITH PASSWORD 'novalon123';
@@ -210,6 +232,7 @@ GRANT ALL PRIVILEGES ON DATABASE manage_system TO novalon;
```
**Linux (Ubuntu/Debian)**:
```bash
sudo apt install postgresql-15 postgresql-contrib-15
sudo systemctl start postgresql
@@ -219,6 +242,7 @@ sudo -u postgres psql
```
在 psql 中执行:
```sql
CREATE DATABASE manage_system;
CREATE USER novalon WITH PASSWORD 'novalon123';
@@ -227,12 +251,14 @@ GRANT ALL PRIVILEGES ON DATABASE manage_system TO novalon;
```
**Windows**:
1. 下载并安装 PostgreSQL: https://www.postgresql.org/download/windows/
2. 使用 pgAdmin 创建数据库和用户,或使用命令行工具
##### 2.4 验证环境
创建并运行环境检查脚本:
```bash
# 检查 Java
java -version
@@ -253,6 +279,7 @@ psql --version
后端使用 Flyway 自动管理数据库迁移,数据库表结构会在首次启动时自动创建。
**开发环境配置** (`novalon-manage-api/manage-app/src/main/resources/application-dev.yml`):
```yaml
spring:
r2dbc:
@@ -264,6 +291,7 @@ spring:
```
**生产环境配置** (`novalon-manage-api/manage-app/src/main/resources/application-prod.yml`):
```yaml
spring:
r2dbc:
@@ -307,6 +335,7 @@ psql -U novalon -d manage_system -c "\dt"
##### 4.1 网关服务概述
`manage-gateway` 是系统的 API 网关,负责:
- 请求路由和转发
- JWT 认证过滤
- RBAC 权限控制
@@ -316,6 +345,7 @@ psql -U novalon -d manage_system -c "\dt"
##### 4.2 网关配置文件
**主配置** (`novalon-manage-api/manage-gateway/src/main/resources/application.yml`):
```yaml
server:
port: 8080
@@ -372,6 +402,7 @@ logging:
网关将所有 `/api/**` 路径的请求转发到 `manage-app` 服务 (端口 8084)。
**路由规则**:
- 所有以 `/api/` 开头的请求都会被转发到后端服务
- 请求会经过 JWT 认证和 RBAC 权限验证
- 失败的请求会自动重试(最多 3 次)
@@ -379,10 +410,12 @@ logging:
##### 4.4 JWT 配置
**环境变量**:
- `JWT_SECRET`: JWT 密钥(生产环境必须设置强密钥)
- `JWT_EXPIRATION`: Token 过期时间(毫秒,默认 24 小时)
**示例**:
```bash
export JWT_SECRET="your-strong-secret-key-here"
export JWT_EXPIRATION="86400000"
@@ -406,16 +439,19 @@ curl http://localhost:8080/actuator/metrics
##### 5.1 启动后端服务
**步骤 1: 进入后端项目目录**
```bash
cd novalon-manage-api
```
**步骤 2: 编译项目**
```bash
mvn clean install -DskipTests
```
**步骤 3: 启动网关服务**
```bash
cd manage-gateway
mvn spring-boot:run
@@ -425,6 +461,7 @@ mvn spring-boot:run
**步骤 4: 启动主应用服务**
打开新的终端窗口:
```bash
cd novalon-manage-api/manage-app
mvn spring-boot:run
@@ -433,6 +470,7 @@ mvn spring-boot:run
主应用将在 `http://localhost:8084` 启动。
**步骤 5: 验证后端服务**
```bash
# 检查网关健康状态
curl http://localhost:8080/actuator/health
@@ -447,11 +485,13 @@ open http://localhost:8084/swagger-ui.html
##### 5.2 启动前端服务
**步骤 1: 进入前端项目目录**
```bash
cd novalon-manage-web
```
**步骤 2: 安装依赖**
```bash
pnpm install
```
@@ -459,12 +499,14 @@ pnpm install
**步骤 3: 配置环境变量**
创建 `.env.local` 文件(如果不存在):
```env
VITE_API_BASE_URL=http://localhost:8080
VITE_APP_TITLE=Novalon管理系统
```
**步骤 4: 启动开发服务器**
```bash
pnpm dev
```
@@ -479,6 +521,7 @@ pnpm dev
##### 6.1 环境配置文件
后端支持多环境配置:
- `application.yml`: 主配置文件
- `application-dev.yml`: 开发环境配置
- `application-test.yml`: 测试环境配置
@@ -488,18 +531,21 @@ pnpm dev
##### 6.2 开发环境启动
**后端**:
```bash
cd novalon-manage-api/manage-app
mvn spring-boot:run -Dspring-boot.run.profiles=dev
```
**前端**:
```bash
cd novalon-manage-web
pnpm dev
```
**特点**:
- 使用本地数据库 (localhost:55432)
- DEBUG 日志级别
- 热重载启用
@@ -508,18 +554,21 @@ pnpm dev
##### 6.3 测试环境启动
**后端**:
```bash
cd novalon-manage-api/manage-app
mvn spring-boot:run -Dspring-boot.run.profiles=test
```
**前端**:
```bash
cd novalon-manage-web
pnpm dev:test
```
**特点**:
- 使用测试数据库
- INFO 日志级别
- 性能监控启用
@@ -528,6 +577,7 @@ pnpm dev:test
##### 6.4 生产环境启动
**后端**:
```bash
# 设置环境变量
export DB_USERNAME=your_prod_db_user
@@ -540,18 +590,21 @@ mvn spring-boot:run -Dspring-boot.run.profiles=prod
```
**前端构建**:
```bash
cd novalon-manage-web
pnpm build:prod
```
**前端部署**:
```bash
# 使用 nginx 或其他静态文件服务器部署 dist 目录
pnpm preview
```
**特点**:
- 使用生产数据库
- INFO/WARN 日志级别
- 性能优化
@@ -561,6 +614,7 @@ pnpm preview
##### 6.5 Docker 环境启动
**使用 docker-compose**:
```bash
# 开发环境
docker-compose -f docker-compose.yml up -d
@@ -570,6 +624,7 @@ docker-compose -f docker-compose.test.yml up -d
```
**特点**:
- 容器化部署
- 服务编排
- 健康检查
@@ -580,11 +635,13 @@ docker-compose -f docker-compose.test.yml up -d
##### 7.1 端口冲突问题
**症状**:
```
Port 8080 was already in use
```
**解决方案**:
```bash
# 查找占用端口的进程
lsof -i :8080 # macOS/Linux
@@ -601,11 +658,13 @@ taskkill /PID <PID> /F # Windows
##### 7.2 数据库连接失败
**症状**:
```
Connection refused: localhost:55432
```
**解决方案**:
```bash
# 检查 PostgreSQL 服务状态
brew services list | grep postgresql # macOS
@@ -625,11 +684,13 @@ sudo ufw allow 5432 # Linux
##### 7.3 Maven 依赖下载失败
**症状**:
```
Could not resolve dependencies
```
**解决方案**:
```bash
# 清理 Maven 缓存
rm -rf ~/.m2/repository
@@ -645,11 +706,13 @@ ping repo.maven.apache.org
##### 7.4 前端依赖安装失败
**症状**:
```
npm ERR! network request failed
```
**解决方案**:
```bash
# 清理缓存
pnpm store prune
@@ -665,12 +728,14 @@ pnpm install
##### 7.5 JWT 认证失败
**症状**:
```
401 Unauthorized
Invalid JWT token
```
**解决方案**:
```bash
# 检查 JWT_SECRET 配置
echo $JWT_SECRET
@@ -685,11 +750,13 @@ echo $JWT_SECRET
##### 7.6 Flyway 迁移失败
**症状**:
```
FlywayException: Validate failed
```
**解决方案**:
```bash
# 查看迁移历史
psql -U novalon -d manage_system -c "SELECT * FROM flyway_schema_history;"
@@ -709,12 +776,14 @@ DELETE FROM flyway_schema_history WHERE success = false;
##### 7.7 内存不足错误
**症状**:
```
Java heap space
OutOfMemoryError
```
**解决方案**:
```bash
# 增加 JVM 内存
export MAVEN_OPTS="-Xmx2g -Xms1g"
@@ -732,11 +801,13 @@ export MAVEN_OPTS="-Xmx2g -Xms1g"
##### 7.8 CORS 跨域问题
**症状**:
```
Access to XMLHttpRequest blocked by CORS policy
```
**解决方案**:
```bash
# 检查网关 CORS 配置
# 在 application.yml 中添加:
@@ -760,6 +831,7 @@ spring:
##### 7.9 日志查看和调试
**查看应用日志**:
```bash
# 后端日志
tail -f novalon-manage-api/manage-app/logs/application.log
@@ -773,6 +845,7 @@ docker-compose logs -f gateway
```
**启用 DEBUG 日志**:
```yaml
# 在 application.yml 中设置
logging:
@@ -787,6 +860,7 @@ logging:
##### 8.1 后端服务验证
**健康检查**:
```bash
# 网关健康检查
curl http://localhost:8080/actuator/health
@@ -799,6 +873,7 @@ curl http://localhost:8084/actuator/health
```
**API 文档访问**:
```bash
# 在浏览器中打开
open http://localhost:8084/swagger-ui.html
@@ -808,6 +883,7 @@ curl http://localhost:8084/swagger-ui.html
```
**数据库连接验证**:
```bash
# 检查数据库表是否创建成功
psql -U novalon -d manage_system -c "\dt"
@@ -817,6 +893,7 @@ psql -U novalon -d manage_system -c "\dt"
```
**API 端点测试**:
```bash
# 测试登录接口
curl -X POST http://localhost:8080/api/auth/login \
@@ -830,12 +907,14 @@ curl -X POST http://localhost:8080/api/auth/login \
##### 8.2 前端应用验证
**应用访问**:
```bash
# 在浏览器中打开
open http://localhost:5173
```
**功能验证清单**:
- [ ] 登录页面正常显示
- [ ] 能够成功登录(使用默认账号 admin/admin123
- [ ] 主页面正常加载
@@ -845,6 +924,7 @@ open http://localhost:5173
- [ ] 系统配置功能可用
**浏览器控制台检查**:
```javascript
// 打开浏览器开发者工具 (F12)
// 检查 Console 标签页,确保没有错误信息
@@ -854,6 +934,7 @@ open http://localhost:5173
##### 8.3 集成测试验证
**运行 API 集成测试**:
```bash
cd api_integration_tests
pip install -r requirements.txt
@@ -861,6 +942,7 @@ pytest tests/ -v
```
**运行 E2E 测试**:
```bash
cd novalon-manage-web
pnpm test:e2e
@@ -869,6 +951,7 @@ pnpm test:e2e
##### 8.4 性能验证
**后端性能测试**:
```bash
# 使用 k6 进行性能测试
cd novalon-manage-api/manage-sys/src/test/k6
@@ -876,6 +959,7 @@ k6 run performance-test.js
```
**前端性能测试**:
```bash
cd novalon-manage-web
pnpm test:perf
@@ -884,6 +968,7 @@ pnpm test:perf
##### 8.5 监控和日志
**查看应用指标**:
```bash
# 查看应用指标
curl http://localhost:8084/actuator/metrics
@@ -893,6 +978,7 @@ curl http://localhost:8084/actuator/metrics/jvm.memory.used
```
**查看日志**:
```bash
# 查看应用日志
tail -f novalon-manage-api/manage-app/logs/application.log
@@ -904,6 +990,7 @@ grep ERROR novalon-manage-api/manage-app/logs/application.log
##### 8.6 完整验证脚本
创建验证脚本 `verify-setup.sh`:
```bash
#!/bin/bash
@@ -948,6 +1035,7 @@ echo "=== 所有服务验证通过 ==="
```
运行验证脚本:
```bash
chmod +x verify-setup.sh
./verify-setup.sh