kindergarten_java/docs/dev-logs/2026-03-16.md

56 lines
2.1 KiB
Markdown
Raw Normal View History

# 2026-03-16 开发日志
## 修复内容
### 登录验证错误信息传递修复
**问题描述:**
- 后端的 `JwtTokenProvider.validateToken()` 方法没有把错误信息返回给前端
- 前端对 403 错误没有完善处理
**修复内容:**
#### 1. 后端修改
**文件:** `reading-platform-java/src/main/java/com/reading/platform/common/security/JwtTokenProvider.java`
- 新增 `validateTokenWithReason(String token)` 方法,返回具体的错误原因:
- `TOKEN_EXPIRED` - token 已过期
- `TOKEN_INVALID` - token 格式错误或无效
- `TOKEN_UNSUPPORTED` - 不支持的 token 格式
- `TOKEN_EMPTY` - token 为空
- 修改原有的 `validateToken(String token)` 方法,内部调用新方法实现
**文件:** `reading-platform-java/src/main/java/com/reading/platform/common/security/JwtAuthenticationFilter.java`
- 修改 `doFilterInternal()` 方法:
- 当 token 验证失败时,不再继续执行 `filterChain.doFilter()`
- 直接返回 401 状态码和错误信息
- 新增 `getErrorMessage()` 方法,将错误原因转换为用户友好的消息
- 新增 `sendError()` 方法,发送 JSON 格式的错误响应
#### 2. 前端修改
**文件:** `reading-platform-frontend/src/api/index.ts`
- 增强 403 响应拦截器处理逻辑:
- 区分 token 过期/无效导致的 403 和权限不足的 403
- 当响应体中的错误码为 401 或 403 时,视为 token 问题,清除本地存储并跳转登录页
- 其他情况视为权限不足,仅显示提示但不跳转
**修改后的错误处理逻辑:**
```
401 → 清除存储 + 跳转登录页
403 + 错误码 401/403 → 清除存储 + 跳转登录页token 问题)
403 + 其他错误码 → 显示提示,不跳转(权限不足)
```
### 测试验证
后续需要验证以下场景:
1. 使用有效 token 正常访问 → 应该成功
2. 使用过期 token 访问 → 后端返回 401 + "Token 已过期",前端跳转登录页
3. 使用无效 token 访问 → 后端返回 401 + "Token 无效",前端跳转登录页
4. 登录时输入错误密码 → 显示具体错误信息