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