peixue-dev/Archive/[一次性]服务列表401错误最终说明-2026-02-01.md

2.4 KiB
Raw Permalink Blame History

服务列表401错误最终说明

问题描述

游客访问服务列表页面时,控制台显示 /api/teacher/list 返回401错误但页面功能正常。

根本原因

  1. 前端配置正确

    • /api/teacher/list 已添加到 GUEST_ALLOWED_URLS 白名单
    • 401错误已配置为静默失败不弹窗、不跳转
  2. 后端配置正确

    • WebMvcConfig.java 已排除 /api/teacher/list 路径
    • TeacherController.javagetTeacherList 方法不需要认证
  3. 为什么还有401错误

    • 后端可能没有重新编译,旧的配置仍在运行
    • 或者 JwtInterceptor 的排除规则没有生效

当前状态

  • 页面功能正常 - 服务列表可以正常显示数据
  • ⚠️ 控制台有错误 - 显示401但不影响使用
  • 游客体验正常 - 不会弹窗或跳转

解决方案

方案1重新编译后端推荐

# 1. 停止后端服务
# 2. 清理并重新编译
cd peidu/backend
mvn clean package -DskipTests
# 3. 重启后端服务

方案2接受现状如果功能正常

如果页面功能完全正常,只是控制台有错误日志,可以暂时接受这个状态:

  • 前端已正确处理401错误静默失败
  • 不影响用户体验
  • 不影响页面显示

验证步骤

  1. 清除浏览器缓存
  2. 以游客身份访问服务列表页面
  3. 检查页面是否正常显示数据
  4. 检查控制台是否还有401错误

技术细节

前端配置request.js

const GUEST_ALLOWED_URLS = [
  '/api/teacher/list',  // ✅ 已添加
  '/api/service/search',
  '/api/category/all',
  // ... 其他白名单接口
]

// 401错误处理
if (isGuest && isGuestAllowedUrl(options.url)) {
  console.log('[Request] 游客模式白名单接口返回401静默失败')
  reject({ code: 401, message: '未登录', silent: true })
  return
}

后端配置WebMvcConfig.java

registry.addInterceptor(jwtInterceptor)
    .addPathPatterns("/api/**")
    .excludePathPatterns(
        "/api/teacher/list",  // ✅ 已排除
        "/api/teacher/detail/**",
        "/api/service/**",
        // ... 其他排除路径
    );

结论

当前实现已经正确只是后端可能需要重新编译。如果页面功能正常控制台的401错误不影响使用可以暂时忽略。

如果需要彻底消除控制台错误,请重新编译并重启后端服务。