212 lines
6.1 KiB
Markdown
212 lines
6.1 KiB
Markdown
|
|
# 游客模式完整修复总结 - 2026-02-01
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
游客模式下访问以下页面时返回401错误,页面显示"不支持"或空白:
|
|||
|
|
- ❌ 专项突破(special-course)
|
|||
|
|
- ❌ 兴趣培养(interest-course)
|
|||
|
|
|
|||
|
|
## 根本原因
|
|||
|
|
|
|||
|
|
后端 `WebMvcConfig.java` 中的JWT拦截器排除列表不完整:
|
|||
|
|
- 只配置了 `/api/special/**`,但实际接口是 `/api/special-course/**`
|
|||
|
|
- 只配置了 `/api/interest/**`,但实际接口是 `/api/interest-course/**`
|
|||
|
|
|
|||
|
|
导致这些接口仍然被JWT拦截器拦截,游客无法访问。
|
|||
|
|
|
|||
|
|
## 修复方案
|
|||
|
|
|
|||
|
|
### 1. 后端配置修复 ✅
|
|||
|
|
|
|||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java`
|
|||
|
|
|
|||
|
|
在JWT拦截器排除列表中添加:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
"/api/special/**",
|
|||
|
|
"/api/special-course/**", // ✅ 新增 - 专项突破课程
|
|||
|
|
"/api/interest/**",
|
|||
|
|
"/api/interest-course/**", // ✅ 新增 - 兴趣培养课程
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 前端白名单(已完善) ✅
|
|||
|
|
|
|||
|
|
**文件**: `peidu/uniapp/src/utils/request.js`
|
|||
|
|
|
|||
|
|
游客白名单已包含所有公开接口:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
const GUEST_ALLOWED_URLS = [
|
|||
|
|
// 服务相关
|
|||
|
|
'/api/service/list',
|
|||
|
|
'/api/service/search',
|
|||
|
|
'/api/service/detail',
|
|||
|
|
|
|||
|
|
// 分类
|
|||
|
|
'/api/category/all',
|
|||
|
|
|
|||
|
|
// 专项服务
|
|||
|
|
'/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',
|
|||
|
|
|
|||
|
|
// 其他
|
|||
|
|
'/api/banner/list',
|
|||
|
|
'/api/notification/unread-count',
|
|||
|
|
'/api/timecard/list',
|
|||
|
|
'/api/order/list',
|
|||
|
|
'/api/order/list-full'
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 完整的游客模式接口列表
|
|||
|
|
|
|||
|
|
### 游客可访问(公开接口)
|
|||
|
|
|
|||
|
|
| 接口路径 | 说明 | 状态 |
|
|||
|
|
|---------|------|------|
|
|||
|
|
| `/api/service/**` | 服务列表、详情、搜索 | ✅ |
|
|||
|
|
| `/api/category/**` | 分类列表 | ✅ |
|
|||
|
|
| `/api/special/**` | 专项服务列表、详情 | ✅ |
|
|||
|
|
| `/api/special-course/**` | 专项课程列表、详情 | ✅ |
|
|||
|
|
| `/api/interest/**` | 兴趣服务列表、详情 | ✅ |
|
|||
|
|
| `/api/interest-course/**` | 兴趣课程列表、详情 | ✅ |
|
|||
|
|
| `/api/assessment/**` | 测评师列表、详情 | ✅ |
|
|||
|
|
| `/api/growth-planning/**` | 成长规划师列表、详情 | ✅ |
|
|||
|
|
| `/api/teacher/**` | 教师列表、详情、筛选 | ✅ |
|
|||
|
|
| `/api/course/**` | 课程列表、详情 | ✅ |
|
|||
|
|
| `/api/banner/**` | 轮播图 | ✅ |
|
|||
|
|
| `/api/announcement/**` | 公告 | ✅ |
|
|||
|
|
|
|||
|
|
### 需要登录(私有接口)
|
|||
|
|
|
|||
|
|
| 接口路径 | 说明 | 原因 |
|
|||
|
|
|---------|------|------|
|
|||
|
|
| `/api/order/**` | 订单管理 | 涉及用户隐私 |
|
|||
|
|
| `/api/payment/**` | 支付相关 | 涉及交易安全 |
|
|||
|
|
| `/api/user/**` | 用户信息 | 涉及用户隐私 |
|
|||
|
|
| `/api/timecard/my` | 我的时卡 | 涉及用户隐私 |
|
|||
|
|
| `/api/coupon/my` | 我的优惠券 | 涉及用户隐私 |
|
|||
|
|
|
|||
|
|
## 重启步骤
|
|||
|
|
|
|||
|
|
### 方式1:使用批处理文件(推荐)
|
|||
|
|
|
|||
|
|
执行:`Archive/[一次性]完整修复游客模式-所有服务-2026-02-01.bat`
|
|||
|
|
|
|||
|
|
### 方式2:手动执行
|
|||
|
|
|
|||
|
|
#### 1. 停止后端服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查找占用8089端口的进程
|
|||
|
|
netstat -ano | findstr :8089
|
|||
|
|
|
|||
|
|
# 停止进程
|
|||
|
|
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. **清除小程序缓存**
|
|||
|
|
- 在微信开发者工具中点击"清缓存" → "清除数据缓存"
|
|||
|
|
|
|||
|
|
2. **退出登录**
|
|||
|
|
- 在小程序中退出登录,确保处于游客状态
|
|||
|
|
|
|||
|
|
3. **测试浏览功能**
|
|||
|
|
- 点击首页的各个服务类型按钮
|
|||
|
|
- 验证是否显示完整的列表数据
|
|||
|
|
- 点击任意卡片查看详情
|
|||
|
|
|
|||
|
|
4. **测试登录拦截**
|
|||
|
|
- 在详情页点击"立即预约"或"立即购买"
|
|||
|
|
- 验证是否提示登录
|
|||
|
|
|
|||
|
|
## 涉及的文件
|
|||
|
|
|
|||
|
|
### 后端文件
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java`
|
|||
|
|
|
|||
|
|
### 前端文件
|
|||
|
|
- `peidu/uniapp/src/utils/request.js`
|
|||
|
|
|
|||
|
|
### 控制器文件
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/controller/SpecialCourseController.java`
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/controller/InterestCourseController.java`
|
|||
|
|
|
|||
|
|
## 总结
|
|||
|
|
|
|||
|
|
修复完成后,游客模式下:
|
|||
|
|
- ✅ 可以浏览所有公开内容(服务、课程、教师等)
|
|||
|
|
- ✅ 可以查看详情页面
|
|||
|
|
- ✅ 可以使用筛选和搜索功能
|
|||
|
|
- ✅ 可以查看轮播图、公告等
|
|||
|
|
- ❌ 无法支付和生成订单(需要登录)
|
|||
|
|
- ❌ 无法查看个人信息和订单(需要登录)
|
|||
|
|
|
|||
|
|
这样既保证了游客可以充分了解平台内容,又保护了用户隐私和交易安全。
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **后端必须重启** - 配置修改后必须重启后端服务才能生效
|
|||
|
|
2. **前端必须重新编译** - 清除缓存后重新编译小程序
|
|||
|
|
3. **测试前清除缓存** - 确保测试的是最新代码
|
|||
|
|
4. **确认游客状态** - 测试前确保已退出登录
|
|||
|
|
|
|||
|
|
## 后续优化建议
|
|||
|
|
|
|||
|
|
1. **统一接口命名** - 考虑将 `/api/special-course` 改为 `/api/special/course`,保持路径层级一致
|
|||
|
|
2. **接口文档** - 维护一份完整的公开接口清单文档
|
|||
|
|
3. **自动化测试** - 添加游客模式的自动化测试用例
|