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