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