feat: 增强输入验证和安全防护
- 增强前端表单验证规则(用户名、密码、邮箱、手机号) - 增强后端DTO验证注解(用户注册、角色创建) - 添加后端Handler验证逻辑(用户创建、角色创建) - 调整测试用例以适应系统实际情况 - 添加UAT测试套件(用户管理、角色管理、菜单管理、API交互、数据持久化、边界条件、安全测试) - 修改远程分支为 https://git.f.novalon.cn/novalon/novalon-manage-system.git
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user