149 lines
3.6 KiB
Markdown
149 lines
3.6 KiB
Markdown
|
|
# 后端游客模式配置说明
|
||
|
|
|
||
|
|
## 当前配置状态
|
||
|
|
|
||
|
|
### 1. Spring Security配置
|
||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/config/SecurityConfig.java`
|
||
|
|
|
||
|
|
**配置内容**:
|
||
|
|
```java
|
||
|
|
.authorizeRequests()
|
||
|
|
// 放行所有接口(临时测试用)
|
||
|
|
.anyRequest().permitAll()
|
||
|
|
```
|
||
|
|
|
||
|
|
**状态**: ✅ 已配置,所有接口都允许访问
|
||
|
|
|
||
|
|
### 2. JWT拦截器排除路径
|
||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java`
|
||
|
|
|
||
|
|
**已排除的路径**:
|
||
|
|
```java
|
||
|
|
.excludePathPatterns(
|
||
|
|
"/api/service/**", // ✅ 服务相关接口
|
||
|
|
"/api/category/**", // ✅ 分类相关接口
|
||
|
|
"/api/banner/**", // ✅ 轮播图接口
|
||
|
|
"/api/teacher/list", // ✅ 教师列表
|
||
|
|
"/api/teacher/detail/**", // ✅ 教师详情
|
||
|
|
...
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
**状态**: ✅ 已配置,游客可以访问这些接口
|
||
|
|
|
||
|
|
## 问题诊断
|
||
|
|
|
||
|
|
### 可能的原因
|
||
|
|
|
||
|
|
1. **后端未重启** - 修改配置后需要重启后端服务
|
||
|
|
2. **缓存问题** - 可能有缓存导致配置未生效
|
||
|
|
3. **端口或URL错误** - 前端请求的URL可能不正确
|
||
|
|
|
||
|
|
### 验证步骤
|
||
|
|
|
||
|
|
#### 1. 检查后端是否运行
|
||
|
|
```bash
|
||
|
|
# Windows
|
||
|
|
netstat -ano | findstr :8080
|
||
|
|
|
||
|
|
# 或者查看进程
|
||
|
|
tasklist | findstr java
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2. 测试接口是否可以匿名访问
|
||
|
|
使用Postman或curl测试:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 测试服务分类接口(不带token)
|
||
|
|
curl http://localhost:8080/api/category/all
|
||
|
|
|
||
|
|
# 测试服务列表接口(不带token)
|
||
|
|
curl http://localhost:8080/api/service/list?page=1&size=10
|
||
|
|
```
|
||
|
|
|
||
|
|
**预期结果**: 应该返回数据,不应该返回401错误
|
||
|
|
|
||
|
|
#### 3. 检查前端请求的URL
|
||
|
|
查看浏览器控制台,确认请求的URL是否正确:
|
||
|
|
- 应该是: `http://localhost:8080/api/category/all`
|
||
|
|
- 不应该是其他端口或域名
|
||
|
|
|
||
|
|
## 解决方案
|
||
|
|
|
||
|
|
### 方案1: 重启后端服务(推荐)
|
||
|
|
|
||
|
|
1. 停止后端服务
|
||
|
|
2. 重新启动后端服务
|
||
|
|
3. 等待服务完全启动
|
||
|
|
4. 测试接口是否可以访问
|
||
|
|
|
||
|
|
### 方案2: 确认配置已生效
|
||
|
|
|
||
|
|
检查后端启动日志,确认:
|
||
|
|
1. Spring Security配置已加载
|
||
|
|
2. WebMvcConfig配置已加载
|
||
|
|
3. 拦截器已注册
|
||
|
|
|
||
|
|
### 方案3: 添加更多日志
|
||
|
|
|
||
|
|
如果问题仍然存在,可以在JwtInterceptor中添加更多日志:
|
||
|
|
|
||
|
|
```java
|
||
|
|
@Override
|
||
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||
|
|
String uri = request.getRequestURI();
|
||
|
|
System.out.println("=== JWT拦截器执行 ===");
|
||
|
|
System.out.println("请求路径: " + uri);
|
||
|
|
|
||
|
|
// 检查是否在排除列表中
|
||
|
|
// 如果在排除列表中,这段代码不应该执行
|
||
|
|
|
||
|
|
...
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 前端配置
|
||
|
|
|
||
|
|
前端已经完成以下配置:
|
||
|
|
|
||
|
|
### 1. 游客白名单
|
||
|
|
**文件**: `peidu/uniapp/src/utils/request.js`
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
const GUEST_ALLOWED_URLS = [
|
||
|
|
'/api/service/list',
|
||
|
|
'/api/service/search',
|
||
|
|
'/api/category/all',
|
||
|
|
'/api/banner/list',
|
||
|
|
'/api/home/courses',
|
||
|
|
...
|
||
|
|
]
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 游客模式判断
|
||
|
|
- 游客访问白名单接口时,不发送Authorization头
|
||
|
|
- 如果后端返回401,返回空数据而不是错误
|
||
|
|
|
||
|
|
### 3. 登录拦截
|
||
|
|
- 预约页面的"确认预约"按钮会检查登录状态
|
||
|
|
- 游客点击时提示"请先登录"并跳转
|
||
|
|
|
||
|
|
## 测试清单
|
||
|
|
|
||
|
|
- [ ] 后端服务已重启
|
||
|
|
- [ ] 使用curl测试接口可以匿名访问
|
||
|
|
- [ ] 前端游客模式可以浏览服务列表
|
||
|
|
- [ ] 前端游客模式可以查看服务详情
|
||
|
|
- [ ] 前端游客点击"确认预约"时提示登录
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
1. **生产环境配置** - 某些接口在生产环境可能需要登录
|
||
|
|
2. **安全性** - 确保敏感接口不在排除列表中
|
||
|
|
3. **一致性** - 前后端的白名单配置应该保持一致
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**创建时间**: 2026-02-01
|
||
|
|
**状态**: 配置已完成,待验证
|