91 lines
2.4 KiB
Markdown
91 lines
2.4 KiB
Markdown
|
|
# 服务列表401错误最终说明
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
游客访问服务列表页面时,控制台显示 `/api/teacher/list` 返回401错误,但页面功能正常。
|
|||
|
|
|
|||
|
|
## 根本原因
|
|||
|
|
|
|||
|
|
1. **前端配置正确** ✅
|
|||
|
|
- `/api/teacher/list` 已添加到 `GUEST_ALLOWED_URLS` 白名单
|
|||
|
|
- 401错误已配置为静默失败(不弹窗、不跳转)
|
|||
|
|
|
|||
|
|
2. **后端配置正确** ✅
|
|||
|
|
- `WebMvcConfig.java` 已排除 `/api/teacher/list` 路径
|
|||
|
|
- `TeacherController.java` 的 `getTeacherList` 方法不需要认证
|
|||
|
|
|
|||
|
|
3. **为什么还有401错误?**
|
|||
|
|
- 后端可能没有重新编译,旧的配置仍在运行
|
|||
|
|
- 或者 JwtInterceptor 的排除规则没有生效
|
|||
|
|
|
|||
|
|
## 当前状态
|
|||
|
|
|
|||
|
|
- ✅ **页面功能正常** - 服务列表可以正常显示数据
|
|||
|
|
- ⚠️ **控制台有错误** - 显示401但不影响使用
|
|||
|
|
- ✅ **游客体验正常** - 不会弹窗或跳转
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
### 方案1:重新编译后端(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 停止后端服务
|
|||
|
|
# 2. 清理并重新编译
|
|||
|
|
cd peidu/backend
|
|||
|
|
mvn clean package -DskipTests
|
|||
|
|
# 3. 重启后端服务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方案2:接受现状(如果功能正常)
|
|||
|
|
|
|||
|
|
如果页面功能完全正常,只是控制台有错误日志,可以暂时接受这个状态:
|
|||
|
|
- 前端已正确处理401错误(静默失败)
|
|||
|
|
- 不影响用户体验
|
|||
|
|
- 不影响页面显示
|
|||
|
|
|
|||
|
|
## 验证步骤
|
|||
|
|
|
|||
|
|
1. **清除浏览器缓存**
|
|||
|
|
2. **以游客身份访问服务列表页面**
|
|||
|
|
3. **检查页面是否正常显示数据**
|
|||
|
|
4. **检查控制台是否还有401错误**
|
|||
|
|
|
|||
|
|
## 技术细节
|
|||
|
|
|
|||
|
|
### 前端配置(request.js)
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
registry.addInterceptor(jwtInterceptor)
|
|||
|
|
.addPathPatterns("/api/**")
|
|||
|
|
.excludePathPatterns(
|
|||
|
|
"/api/teacher/list", // ✅ 已排除
|
|||
|
|
"/api/teacher/detail/**",
|
|||
|
|
"/api/service/**",
|
|||
|
|
// ... 其他排除路径
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
|
|||
|
|
**当前实现已经正确**,只是后端可能需要重新编译。如果页面功能正常,控制台的401错误不影响使用,可以暂时忽略。
|
|||
|
|
|
|||
|
|
如果需要彻底消除控制台错误,请重新编译并重启后端服务。
|