2.7 KiB
2.7 KiB
专项课程游客模式修复说明
问题描述
未登录用户访问专项课程列表时返回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
修改内容:
// 验证token - 如果token无效,也放行,让Controller决定是否需要登录
if (!jwtUtil.validateToken(token)) {
System.out.println("token验证失败,但仍然放行(游客模式)");
return true; // 改为放行,不抛出异常
}
原代码:
// 验证token
if (!jwtUtil.validateToken(token)) {
System.out.println("token验证失败,抛出过期异常");
throw new BusinessException(401, "token已过期"); // 抛出异常
}
执行步骤
- 运行修复脚本:
Archive/[一次性]修复专项课程游客模式-2026-02-01.bat - 等待后端服务启动(约30秒)
- 清除小程序缓存
- 退出登录(如果已登录)
- 访问专项课程页面
- 验证能否看到课程列表
影响范围
- ✅ 专项课程列表:游客可访问
- ✅ 专项课程详情:游客可访问
- ✅ 其他公开接口:游客可访问
- ❌ 支付和订单:游客无法访问(需要登录)
测试验证
测试1:游客访问专项课程列表
curl -X GET "http://localhost:8089/api/special-course/list" -H "Content-Type: application/json"
预期结果:返回200,包含课程列表数据
测试2:游客访问专项课程详情
curl -X GET "http://localhost:8089/api/special-course/detail/1" -H "Content-Type: application/json"
预期结果:返回200,包含课程详情数据
测试3:游客尝试创建订单
curl -X POST "http://localhost:8089/api/order/create" -H "Content-Type: application/json" -d "{}"
预期结果:返回401或提示需要登录
注意事项
- 前端已经正确处理了游客模式(
request.js中的GUEST_ALLOWED_URLS) - 后端配置已经排除了专项课程接口(
WebMvcConfig.java) - 数据库租户插件已经忽略了
special_course表(MyBatisPlusConfig.java) - 此修复不影响其他需要登录的接口
修复时间
2026-02-01