peixue-dev/Archive/[一次性]专项课程游客模式修复说明-2026-02-01.md

90 lines
2.7 KiB
Markdown
Raw Normal View History

2026-02-28 17:26:03 +08:00
# 专项课程游客模式修复说明
## 问题描述
未登录用户访问专项课程列表时返回401错误无法查看课程数据。
## 问题原因
JWT拦截器在token验证失败时抛出401异常导致游客无法访问。
虽然 `WebMvcConfig.java` 中已经配置了排除 `/api/special-course/**`但是当用户携带了过期或无效的token时JWT拦截器仍然会验证token并抛出异常。
## 修复方案
修改 `JwtInterceptor.java`
- token验证失败时不抛出异常
- 改为直接放行让Controller决定是否需要登录
- 游客模式下可以正常访问公开接口
## 修改文件
### 1. JwtInterceptor.java
**修改位置:** `peidu/backend/src/main/java/com/peidu/interceptor/JwtInterceptor.java`
**修改内容:**
```java
// 验证token - 如果token无效也放行让Controller决定是否需要登录
if (!jwtUtil.validateToken(token)) {
System.out.println("token验证失败但仍然放行游客模式");
return true; // 改为放行,不抛出异常
}
```
**原代码:**
```java
// 验证token
if (!jwtUtil.validateToken(token)) {
System.out.println("token验证失败抛出过期异常");
throw new BusinessException(401, "token已过期"); // 抛出异常
}
```
## 执行步骤
1. 运行修复脚本:`Archive/[一次性]修复专项课程游客模式-2026-02-01.bat`
2. 等待后端服务启动约30秒
3. 清除小程序缓存
4. 退出登录(如果已登录)
5. 访问专项课程页面
6. 验证能否看到课程列表
## 影响范围
- ✅ 专项课程列表:游客可访问
- ✅ 专项课程详情:游客可访问
- ✅ 其他公开接口:游客可访问
- ❌ 支付和订单:游客无法访问(需要登录)
## 测试验证
### 测试1游客访问专项课程列表
```bash
curl -X GET "http://localhost:8089/api/special-course/list" -H "Content-Type: application/json"
```
预期结果返回200包含课程列表数据
### 测试2游客访问专项课程详情
```bash
curl -X GET "http://localhost:8089/api/special-course/detail/1" -H "Content-Type: application/json"
```
预期结果返回200包含课程详情数据
### 测试3游客尝试创建订单
```bash
curl -X POST "http://localhost:8089/api/order/create" -H "Content-Type: application/json" -d "{}"
```
预期结果返回401或提示需要登录
## 注意事项
1. 前端已经正确处理了游客模式(`request.js` 中的 `GUEST_ALLOWED_URLS`
2. 后端配置已经排除了专项课程接口(`WebMvcConfig.java`
3. 数据库租户插件已经忽略了 `special_course` 表(`MyBatisPlusConfig.java`
4. 此修复不影响其他需要登录的接口
## 修复时间
2026-02-01