feat: 统一JWT密钥配置并修复签名验证问题
修复前端签名生成中bodyString硬编码问题 添加start-frontend.sh脚本启动前端服务 统一manage-app和gateway的JWT密钥配置 修复Repository扫描路径问题 更新测试配置和依赖 重构表名映射为sys_user和sys_role 完善用户实体类字段映射 添加集成测试配置和测试用例
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
# Novalon管理系统自动化流程测试报告
|
||||
|
||||
**测试时间**: 2026-04-02
|
||||
**测试人员**: 张翔
|
||||
**测试环境**: 开发环境
|
||||
|
||||
## 测试概述
|
||||
|
||||
本次测试旨在全面验证Novalon管理系统的所有业务流程,包括用户管理、角色管理、菜单管理等核心功能。
|
||||
|
||||
## 测试结果总结
|
||||
|
||||
| 测试项 | 状态 | 通过率 |
|
||||
|--------|------|--------|
|
||||
| 登录功能 | ✅ 通过 | 100% |
|
||||
| 仪表板加载 | ✅ 通过 | 100% |
|
||||
| 用户管理 | ❌ 失败 | 0% |
|
||||
| 角色管理 | ❌ 失败 | 0% |
|
||||
| 菜单管理 | ❌ 失败 | 0% |
|
||||
| 字典管理 | ❌ 失败 | 0% |
|
||||
| 系统配置 | ❌ 失败 | 0% |
|
||||
| 文件管理 | ❌ 失败 | 0% |
|
||||
| 通知管理 | ❌ 失败 | 0% |
|
||||
| 审计日志 | ❌ 失败 | 0% |
|
||||
|
||||
**总体通过率**: 18.18% (2/11)
|
||||
|
||||
## 详细测试结果
|
||||
|
||||
### 1. 登录功能测试 ✅
|
||||
|
||||
**测试步骤**:
|
||||
1. 访问登录页面
|
||||
2. 输入用户名: admin
|
||||
3. 输入密码: admin123
|
||||
4. 点击登录按钮
|
||||
|
||||
**测试结果**: 通过
|
||||
- Token成功保存到localStorage
|
||||
- 页面成功跳转到仪表板
|
||||
|
||||
### 2. 仪表板加载测试 ✅
|
||||
|
||||
**测试步骤**:
|
||||
1. 登录后访问仪表板页面
|
||||
2. 验证页面元素加载
|
||||
|
||||
**测试结果**: 通过
|
||||
- 页面成功加载
|
||||
- 统计数据正确显示
|
||||
- 所有API请求返回200(除/api/logs/login/recent返回500)
|
||||
|
||||
### 3. 用户管理测试 ❌
|
||||
|
||||
**测试步骤**:
|
||||
1. 访问用户管理页面
|
||||
2. 验证页面加载
|
||||
|
||||
**测试结果**: 失败
|
||||
- 页面被重定向到登录页
|
||||
- Token被清空
|
||||
- API请求返回401错误
|
||||
|
||||
**根本原因**:
|
||||
- 请求缺少`X-User-Id`和`X-Username` header
|
||||
- JwtAuthenticationFilter未正确添加这些header
|
||||
- RbacAuthorizationFilter因缺少X-User-Id header而返回401错误
|
||||
|
||||
### 4. 其他模块测试 ❌
|
||||
|
||||
所有其他模块(角色管理、菜单管理等)都遇到相同的问题:
|
||||
- 页面被重定向到登录页
|
||||
- Token被清空
|
||||
- API请求返回401错误
|
||||
|
||||
## 问题分析
|
||||
|
||||
### 核心问题
|
||||
|
||||
**JwtAuthenticationFilter未正确工作**
|
||||
|
||||
JwtAuthenticationFilter应该:
|
||||
1. 验证JWT Token
|
||||
2. 从Token中提取userId和username
|
||||
3. 添加`X-User-Id`和`X-Username` header到请求中
|
||||
|
||||
但实际上,这些header没有被添加,导致RbacAuthorizationFilter无法获取用户ID,返回401错误。
|
||||
|
||||
### 可能的原因
|
||||
|
||||
1. **过滤器执行顺序问题**: JwtAuthenticationFilter可能没有在RbacAuthorizationFilter之前执行
|
||||
2. **过滤器注册问题**: JwtAuthenticationFilter可能没有正确注册到Spring Cloud Gateway
|
||||
3. **Token解析问题**: JwtUtil可能无法正确解析Token
|
||||
4. **配置问题**: application.yml中的过滤器配置可能有问题
|
||||
|
||||
### 验证发现
|
||||
|
||||
1. **前端请求正确**: 所有请求都包含Token和签名头
|
||||
2. **签名验证通过**: SignatureFilter正常工作
|
||||
3. **部分API成功**: Dashboard的API请求(如/api/users/count)返回200成功
|
||||
4. **权限API失败**: 需要特定权限的API(如/api/users/page)返回401错误
|
||||
|
||||
## 建议修复方案
|
||||
|
||||
### 方案1: 检查JwtAuthenticationFilter配置
|
||||
|
||||
1. 确认JwtAuthenticationFilter是否正确注册为Spring Bean
|
||||
2. 检查application.yml中的default-filters配置
|
||||
3. 验证过滤器的执行顺序
|
||||
|
||||
### 方案2: 添加调试日志
|
||||
|
||||
1. 在JwtAuthenticationFilter中添加详细的调试日志
|
||||
2. 记录Token验证过程
|
||||
3. 记录header添加过程
|
||||
|
||||
### 方案3: 简化权限验证
|
||||
|
||||
临时禁用RbacAuthorizationFilter,验证JwtAuthenticationFilter是否正常工作:
|
||||
```yaml
|
||||
default-filters:
|
||||
- name: JwtAuthentication
|
||||
# - name: RbacAuthorization # 临时注释
|
||||
```
|
||||
|
||||
### 方案4: 检查权限配置
|
||||
|
||||
检查数据库中admin用户的权限配置,确保有访问所有API的权限。
|
||||
|
||||
## 测试文件整理
|
||||
|
||||
已将所有测试文件整理到`test-suite`目录:
|
||||
|
||||
```
|
||||
test-suite/
|
||||
├── tests/
|
||||
│ ├── e2e/
|
||||
│ │ ├── test_comprehensive_workflow.py # 全面业务流程测试
|
||||
│ │ ├── test_signature.py # 签名测试
|
||||
│ │ ├── check_*.py # 各种调试脚本
|
||||
│ │ └── debug_*.py # 调试脚本
|
||||
│ ├── integration/ # 集成测试
|
||||
│ ├── performance/ # 性能测试
|
||||
│ ├── security/ # 安全测试
|
||||
│ └── uat/ # UAT测试
|
||||
├── api/ # API客户端
|
||||
├── utils/ # 测试工具
|
||||
└── config/ # 测试配置
|
||||
```
|
||||
|
||||
## 下一步行动
|
||||
|
||||
1. **优先级高**: 修复JwtAuthenticationFilter问题
|
||||
2. **优先级高**: 验证RbacAuthorizationFilter的权限配置
|
||||
3. **优先级中**: 完善测试脚本,添加更多业务场景
|
||||
4. **优先级低**: 优化测试报告格式
|
||||
|
||||
## 附录
|
||||
|
||||
### 测试环境信息
|
||||
|
||||
- 操作系统: macOS
|
||||
- 前端服务: http://localhost:3002
|
||||
- API网关: http://localhost:8080
|
||||
- 后端应用: http://localhost:8084
|
||||
- 数据库: PostgreSQL
|
||||
|
||||
### 测试数据
|
||||
|
||||
- 用户名: admin
|
||||
- 密码: admin123
|
||||
- 用户ID: 1064
|
||||
|
||||
### API请求示例
|
||||
|
||||
**成功的请求**:
|
||||
```
|
||||
GET /api/users/count
|
||||
Headers:
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
|
||||
X-Signature: ...
|
||||
X-Timestamp: ...
|
||||
X-Nonce: ...
|
||||
```
|
||||
|
||||
**失败的请求**:
|
||||
```
|
||||
GET /api/users/page?page=0&size=10
|
||||
Headers:
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
|
||||
X-Signature: ...
|
||||
X-Timestamp: ...
|
||||
X-Nonce: ...
|
||||
X-User-Id: 缺失 ❌
|
||||
X-Username: 缺失 ❌
|
||||
```
|
||||
Reference in New Issue
Block a user