3.9 KiB
3.9 KiB
教师筛选401错误修复说明
问题描述
游客访问教师列表页面时,控制台显示错误:
加载筛选选项失败: {code: 401, message: "未登录", data: {…}, silent: true}
错误发生在 pages/teacher/list.vue:214,调用 api.teacherApi.getFilterOptions() 时返回401。
根本原因
/api/teacher/filter-options 接口没有添加到游客白名单,导致游客访问时返回401错误。
虽然前端已经配置了静默失败(silent: true),但页面会使用默认的筛选选项,这不是最佳体验。
修复方案
1. 前端修复(request.js)
在 GUEST_ALLOWED_URLS 中添加 /api/teacher/filter-options:
const GUEST_ALLOWED_URLS = [
'/api/notification/unread-count',
'/api/timecard/list',
'/api/home/courses',
'/api/banner/list',
'/api/service/list',
'/api/service/search',
'/api/category/all',
'/api/special-course/list',
'/api/special-course/detail',
'/api/teacher/list',
'/api/teacher/filter-options', // ✅ 新增
'/api/course/list',
'/api/course/detail',
'/api/order/list',
'/api/order/list-full'
]
2. 后端修复(WebMvcConfig.java)
在 JWT 拦截器的排除路径中添加 /api/teacher/filter-options:
registry.addInterceptor(jwtInterceptor)
.addPathPatterns("/api/**")
.excludePathPatterns(
"/api/auth/**",
"/api/teacher/list",
"/api/teacher/detail/**",
"/api/teacher/filter-options", // ✅ 新增
"/api/service/**",
// ... 其他路径
);
执行步骤
方式1:使用脚本(推荐)
运行 [一次性]清除缓存重新编译-教师筛选修复-2026-02-01.bat
方式2:手动执行
-
清除小程序缓存
cd peidu/uniapp rmdir /s /q unpackage\dist rmdir /s /q node_modules\.cache -
重新编译小程序
npm run build:mp-weixin -
停止后端服务
-
重新编译后端
cd peidu/backend mvn clean package -DskipTests -
启动后端服务
-
清除微信开发者工具缓存
- 工具 → 清除缓存 → 全部清除
-
重新编译小程序
验证步骤
- 以游客身份访问教师列表页面
- 点击"科目"、"区域"、"年级"筛选按钮
- 检查控制台是否还有401错误
- 确认筛选选项是否正常显示(不是默认选项)
预期结果
- ✅ 控制台不再显示
/api/teacher/filter-options的401错误 - ✅ 筛选选项正常加载(从后端获取真实数据)
- ✅ 游客可以正常使用筛选功能
- ✅ 不影响已登录用户的使用
技术细节
接口说明
- 接口路径:
/api/teacher/filter-options - 请求方法: GET
- 是否需要登录: 否(游客可访问)
- 返回数据:
{ "subjects": ["语文", "数学", "英语", ...], "areas": ["朝阳区", "海淀区", ...], "grades": ["1-3年级", "4-6年级", ...] }
页面逻辑
- 页面加载时调用
loadFilterOptions()获取筛选选项 - 如果接口失败(401),使用
setDefaultFilterOptions()设置默认选项 - 用户点击筛选按钮时显示筛选弹窗
- 选择筛选条件后重新加载教师列表
错误处理
try {
const res = await api.teacherApi.getFilterOptions()
// 处理数据...
} catch (error) {
console.error('加载筛选选项失败:', error)
// 使用默认选项
this.setDefaultFilterOptions()
}
相关文件
peidu/uniapp/src/utils/request.js- 前端请求配置peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java- 后端拦截器配置peidu/uniapp/src/pages/teacher/list.vue- 教师列表页面peidu/uniapp/src/api/index.js- API定义
注意事项
- 修改后必须重新编译前端和后端
- 必须清除微信开发者工具缓存
- 确保后端服务已重启
- 这个修复不影响已登录用户的功能