peixue-dev/Archive/[一次性]专项课程游客模式修复说明-2026-02-01.md

2.7 KiB
Raw Permalink Blame History

专项课程游客模式修复说明

问题描述

未登录用户访问专项课程列表时返回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已过期");  // 抛出异常
}

执行步骤

  1. 运行修复脚本:Archive/[一次性]修复专项课程游客模式-2026-02-01.bat
  2. 等待后端服务启动约30秒
  3. 清除小程序缓存
  4. 退出登录(如果已登录)
  5. 访问专项课程页面
  6. 验证能否看到课程列表

影响范围

  • 专项课程列表:游客可访问
  • 专项课程详情:游客可访问
  • 其他公开接口:游客可访问
  • 支付和订单:游客无法访问(需要登录)

测试验证

测试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或提示需要登录

注意事项

  1. 前端已经正确处理了游客模式(request.js 中的 GUEST_ALLOWED_URLS
  2. 后端配置已经排除了专项课程接口(WebMvcConfig.java
  3. 数据库租户插件已经忽略了 special_course 表(MyBatisPlusConfig.java
  4. 此修复不影响其他需要登录的接口

修复时间

2026-02-01