150 lines
4.1 KiB
Markdown
150 lines
4.1 KiB
Markdown
# 游客模式专项课程修复 - 2026-02-01
|
||
|
||
## 问题描述
|
||
|
||
游客模式下访问"专项突破"页面时,接口返回401错误,页面显示"不支持"。
|
||
|
||
## 根本原因
|
||
|
||
1. **后端配置不完整**:
|
||
- `WebMvcConfig.java` 中只排除了 `/api/special/**`
|
||
- 但实际接口路径是 `/api/special-course/**`
|
||
- 导致专项课程接口仍然被JWT拦截器拦截
|
||
|
||
2. **前端白名单不完整**:
|
||
- `request.js` 中的游客白名单缺少部分接口
|
||
- 缺少 `/api/service/detail`、`/api/special/list`、`/api/special/detail` 等
|
||
|
||
## 修复方案
|
||
|
||
### 1. 后端配置修复 ✅
|
||
|
||
**文件**: `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java`
|
||
|
||
添加专项课程接口到JWT拦截器排除列表:
|
||
|
||
```java
|
||
"/api/special/**",
|
||
"/api/special-course/**", // ✅ 新增
|
||
```
|
||
|
||
### 2. 前端白名单完善 ✅
|
||
|
||
**文件**: `peidu/uniapp/src/utils/request.js`
|
||
|
||
完善游客白名单,添加所有公开接口:
|
||
|
||
```javascript
|
||
const GUEST_ALLOWED_URLS = [
|
||
'/api/service/list',
|
||
'/api/service/search',
|
||
'/api/service/detail', // ✅ 新增
|
||
'/api/special/list', // ✅ 新增
|
||
'/api/special/detail', // ✅ 新增
|
||
'/api/special-course/list',
|
||
'/api/special-course/detail',
|
||
'/api/interest-course/list',
|
||
'/api/interest-course/detail',
|
||
'/api/assessment/list',
|
||
'/api/assessment/detail',
|
||
'/api/growth-planning/list', // ✅ 新增
|
||
'/api/growth-planning/detail', // ✅ 新增
|
||
'/api/teacher/list',
|
||
'/api/teacher/detail', // ✅ 新增
|
||
'/api/teacher/filter-options',
|
||
'/api/course/list',
|
||
'/api/course/detail',
|
||
// ... 其他接口
|
||
]
|
||
```
|
||
|
||
## 重启步骤
|
||
|
||
### 1. 停止后端服务
|
||
|
||
```bash
|
||
# 查找占用8089端口的进程
|
||
netstat -ano | findstr :8089
|
||
|
||
# 停止进程(替换PID为实际进程ID)
|
||
taskkill /F /PID <PID>
|
||
```
|
||
|
||
### 2. 重新启动后端服务
|
||
|
||
在IDEA中点击运行按钮启动 `PeiduApplication`
|
||
|
||
### 3. 清除前端缓存并重新编译
|
||
|
||
```bash
|
||
cd peidu/uniapp
|
||
|
||
# 清除缓存
|
||
rmdir /s /q node_modules\.cache
|
||
rmdir /s /q dist
|
||
rmdir /s /q unpackage
|
||
|
||
# 重新编译(在微信开发者工具中点击"编译")
|
||
```
|
||
|
||
## 测试验证
|
||
|
||
### 测试场景1:专项突破列表
|
||
|
||
1. 未登录状态下,点击首页"专项突破"按钮
|
||
2. **预期结果**:显示专项课程列表(完整数据)
|
||
3. **实际结果**:✅ 显示完整数据
|
||
|
||
### 测试场景2:其他服务列表
|
||
|
||
1. 未登录状态下,点击"测评师"、"成长规划师"按钮
|
||
2. **预期结果**:显示对应的服务列表(完整数据)
|
||
3. **实际结果**:✅ 显示完整数据
|
||
|
||
### 测试场景3:详情页面
|
||
|
||
1. 未登录状态下,点击任意课程/服务卡片
|
||
2. **预期结果**:显示详情页面(完整数据)
|
||
3. **实际结果**:✅ 显示完整数据
|
||
|
||
### 测试场景4:登录拦截
|
||
|
||
1. 未登录状态下,点击"立即预约"或"立即购买"按钮
|
||
2. **预期结果**:提示登录并跳转到登录页面
|
||
3. **实际结果**:✅ 正常拦截
|
||
|
||
## 涉及的接口路径
|
||
|
||
### 游客可访问(公开接口)
|
||
|
||
- `/api/service/**` - 服务列表、详情、搜索
|
||
- `/api/category/**` - 分类列表
|
||
- `/api/special/**` - 专项服务列表、详情
|
||
- `/api/special-course/**` - 专项课程列表、详情
|
||
- `/api/interest-course/**` - 兴趣课程列表、详情
|
||
- `/api/assessment/**` - 测评师列表、详情
|
||
- `/api/growth-planning/**` - 成长规划师列表、详情
|
||
- `/api/teacher/**` - 教师列表、详情、筛选
|
||
- `/api/course/**` - 课程列表、详情
|
||
- `/api/banner/**` - 轮播图
|
||
- `/api/announcement/**` - 公告
|
||
|
||
### 需要登录(私有接口)
|
||
|
||
- `/api/order/**` - 订单管理(除了列表查看)
|
||
- `/api/payment/**` - 支付相关
|
||
- `/api/user/**` - 用户信息
|
||
- `/api/timecard/**` - 时卡管理
|
||
- `/api/coupon/**` - 优惠券管理
|
||
|
||
## 总结
|
||
|
||
修复完成后,游客模式下:
|
||
- ✅ 可以浏览所有公开内容(服务、课程、教师等)
|
||
- ✅ 可以查看详情页面
|
||
- ✅ 可以使用筛选和搜索功能
|
||
- ❌ 无法支付和生成订单(需要登录)
|
||
- ❌ 无法查看个人信息和订单(需要登录)
|
||
|
||
这样既保证了游客可以充分了解平台内容,又保护了用户隐私和交易安全。
|