# 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. 登录时输入错误密码 → 显示具体错误信息
