# Findings

## JWT修复发现

### JWT密钥不一致问题
- **Date:** 2026-04-02
- **Source:** Systematic Debugging Phase 2
- **Details:** 
  - manage-app使用默认secret: `default-secret-key-change-in-production` (39 bytes, HS256)
  - gateway使用配置secret: `U2FsdGVkX1+vZ5Y9QmKxL8nN3rP7tW2jH4fG6dA8sB1cE5yN0zX3qV7wM4` (58 bytes, HS384)
  - 导致Token验证失败，JwtAuthenticationFilter无法添加X-User-Id header
- **Impact:** 用户管理等功能返回401错误

### 签名验证问题
- **Date:** 2026-04-02
- **Source:** Systematic Debugging Phase 2
- **Details:**
  - 前端signature.ts中bodyString被硬编码为空字符串
  - 导致POST请求签名不正确
  - Gateway签名验证失败
- **Impact:** 登录等POST请求失败

### Repository扫描问题
- **Date:** 2026-04-02
- **Source:** 编译错误
- **Details:**
  - AuditLogRepository未被扫描到
  - @EnableR2dbcRepositories缺少audit.repository包路径
- **Impact:** manage-app启动失败

### JwtKeyService初始化问题
- **Date:** 2026-04-02
- **Source:** 代码审查
- **Details:**
  - JwtKeyManagementConfig使用@Bean创建新实例
  - 与@Autowired注入的实例不一致
  - 密钥未正确初始化
- **Impact:** JWT验证失败

## 命名规范现状

### Service层命名
- **Date:** 2026-04-02
- **Source:** 代码扫描
- **Details:**
  - 当前Service接口无统一前缀（如SysUserService）
  - 当前Service实现无统一后缀（如SysUserServiceImpl）
  - 需要统一为：接口IXxxService，实现XxxService
- **Impact:** 代码可读性和可维护性

### Repository层命名
- **Date:** 2026-04-02
- **Source:** 代码扫描
- **Details:**
  - 当前Repository接口无统一前缀（如SysUserRepository）
  - 当前Repository实现无统一后缀
  - 需要统一为：接口IXxxRepository，实现XxxRepository
- **Impact:** 代码可读性和可维护性

## 测试结果

### 初始测试结果
- **Date:** 2026-04-02
- **Source:** test-suite/tests/e2e/check_users_page.py
- **Details:**
  - 登录功能：✅ 通过
  - Dashboard加载：✅ 通过
  - 用户管理：❌ 失败（401错误）
  - 角色管理：❌ 失败（401错误）
  - 其他模块：❌ 失败（401错误）
- **Impact:** 需要修复JWT和签名问题

## 技术决策

### JWT密钥管理
- **Date:** 2026-04-02
- **Decision:** 统一使用gateway的密钥配置
- **Reason:** 
  - Gateway密钥更长更安全（58 bytes vs 39 bytes）
  - 支持更强的加密算法（HS384 vs HS256）
  - 便于统一管理
- **Impact:** manage-app需要更新JWT配置

### 签名实现
- **Date:** 2026-04-02
- **Decision:** 修复前端bodyString处理
- **Reason:**
  - 需要正确处理POST请求体
  - 确保签名验证通过
- **Impact:** 前端signature.ts需要修改

### 命名规范
- **Date:** 2026-04-02
- **Decision:** 采用IXxx接口 + Xxx实现的标准命名
- **Reason:**
  - 符合C#/.NET命名惯例
  - 提高代码可读性
  - 便于区分接口和实现
- **Impact:** 需要重命名大量文件和类
