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

90 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 专项课程游客模式修复说明
## 问题描述
未登录用户访问专项课程列表时返回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