177 lines
4.0 KiB
Markdown
177 lines
4.0 KiB
Markdown
|
|
# 后端服务接口匿名访问配置检查
|
||
|
|
|
||
|
|
## 检查结果
|
||
|
|
|
||
|
|
### 1. Security配置 ✅
|
||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/config/SecurityConfig.java`
|
||
|
|
|
||
|
|
**配置**:
|
||
|
|
```java
|
||
|
|
.authorizeRequests()
|
||
|
|
// 放行所有接口(临时测试用)
|
||
|
|
.anyRequest().permitAll()
|
||
|
|
```
|
||
|
|
|
||
|
|
**结论**: Security层面已经放行所有接口
|
||
|
|
|
||
|
|
### 2. JWT拦截器配置 ✅
|
||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java`
|
||
|
|
|
||
|
|
**配置**:
|
||
|
|
```java
|
||
|
|
registry.addInterceptor(jwtInterceptor)
|
||
|
|
.addPathPatterns("/api/**")
|
||
|
|
.excludePathPatterns(
|
||
|
|
// ... 其他排除路径
|
||
|
|
"/api/service/**", // ✅ 已排除
|
||
|
|
"/api/category/**", // ✅ 已排除
|
||
|
|
// ...
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
**结论**: JWT拦截器已经排除了服务和分类相关的所有接口
|
||
|
|
|
||
|
|
### 3. JWT拦截器实现
|
||
|
|
**文件**: `peidu/backend/src/main/java/com/peidu/interceptor/JwtInterceptor.java`
|
||
|
|
|
||
|
|
**逻辑**:
|
||
|
|
```java
|
||
|
|
if (!StringUtils.hasText(token)) {
|
||
|
|
throw new BusinessException(401, "未登录");
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**问题**: 如果token为空,直接抛出401异常
|
||
|
|
|
||
|
|
## 问题分析
|
||
|
|
|
||
|
|
后端配置是正确的,但是请求仍然返回401,可能的原因:
|
||
|
|
|
||
|
|
1. **配置未生效** - 需要重启后端服务
|
||
|
|
2. **路径匹配问题** - 实际请求路径与配置的排除路径不匹配
|
||
|
|
3. **其他拦截器** - 可能有其他拦截器在起作用
|
||
|
|
|
||
|
|
## 解决方案
|
||
|
|
|
||
|
|
### 方案1: 重启后端服务(推荐)
|
||
|
|
|
||
|
|
后端配置已经正确,只需要重启服务让配置生效:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 停止后端服务
|
||
|
|
# 重新启动后端服务
|
||
|
|
```
|
||
|
|
|
||
|
|
### 方案2: 验证路径匹配
|
||
|
|
|
||
|
|
检查实际请求的URL是否与配置的排除路径匹配:
|
||
|
|
|
||
|
|
**前端请求**:
|
||
|
|
- `/api/category/all`
|
||
|
|
- `/api/service/list`
|
||
|
|
- `/api/service/search`
|
||
|
|
|
||
|
|
**后端配置**:
|
||
|
|
- `/api/category/**` ✅ 匹配
|
||
|
|
- `/api/service/**` ✅ 匹配
|
||
|
|
|
||
|
|
路径匹配是正确的!
|
||
|
|
|
||
|
|
### 方案3: 添加调试日志
|
||
|
|
|
||
|
|
在 `JwtInterceptor` 中已经有调试日志:
|
||
|
|
```java
|
||
|
|
System.out.println("=== JWT拦截器执行 ===");
|
||
|
|
System.out.println("请求路径: " + request.getRequestURI());
|
||
|
|
```
|
||
|
|
|
||
|
|
重启后端后,查看控制台日志,确认:
|
||
|
|
1. 服务接口的请求是否进入了JWT拦截器
|
||
|
|
2. 如果进入了,说明排除配置没有生效
|
||
|
|
|
||
|
|
## 测试步骤
|
||
|
|
|
||
|
|
### 1. 重启后端服务
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd peidu/backend
|
||
|
|
mvn clean package
|
||
|
|
java -jar target/peidu-backend-1.0.0.jar
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 测试匿名访问
|
||
|
|
|
||
|
|
使用Postman或curl测试:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 测试获取所有分类(不带token)
|
||
|
|
curl -X GET http://localhost:8089/api/category/all
|
||
|
|
|
||
|
|
# 测试获取服务列表(不带token)
|
||
|
|
curl -X GET "http://localhost:8089/api/service/list?page=1&size=10"
|
||
|
|
|
||
|
|
# 测试搜索服务(不带token)
|
||
|
|
curl -X GET "http://localhost:8089/api/service/search?keyword=测评"
|
||
|
|
```
|
||
|
|
|
||
|
|
**预期结果**: 返回200和数据,不返回401
|
||
|
|
|
||
|
|
### 3. 查看后端日志
|
||
|
|
|
||
|
|
如果请求进入了JWT拦截器,会看到:
|
||
|
|
```
|
||
|
|
=== JWT拦截器执行 ===
|
||
|
|
请求路径: /api/category/all
|
||
|
|
```
|
||
|
|
|
||
|
|
如果看到这个日志,说明排除配置没有生效,需要检查配置。
|
||
|
|
|
||
|
|
如果没有看到这个日志,说明排除配置生效了,请求没有进入JWT拦截器。
|
||
|
|
|
||
|
|
## 前端配置
|
||
|
|
|
||
|
|
前端已经正确配置:
|
||
|
|
|
||
|
|
1. **游客白名单** ✅
|
||
|
|
```javascript
|
||
|
|
const GUEST_ALLOWED_URLS = [
|
||
|
|
'/api/service/list',
|
||
|
|
'/api/service/search',
|
||
|
|
'/api/category/all',
|
||
|
|
// ...
|
||
|
|
]
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **不发送token** ✅
|
||
|
|
```javascript
|
||
|
|
// 添加token到请求头(如果有token)
|
||
|
|
if (token) {
|
||
|
|
header['Authorization'] = buildAuthHeader(token)
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **静默处理401** ✅
|
||
|
|
```javascript
|
||
|
|
if (isGuest && isGuestAllowedUrl(options.url)) {
|
||
|
|
reject({ code: 401, message: '未登录', silent: true })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 结论
|
||
|
|
|
||
|
|
**后端配置是正确的**,问题可能是:
|
||
|
|
1. 后端服务没有重启,配置未生效
|
||
|
|
2. 需要清除后端编译缓存
|
||
|
|
|
||
|
|
**建议操作**:
|
||
|
|
1. 重启后端服务
|
||
|
|
2. 清除前端缓存并重新编译
|
||
|
|
3. 测试游客访问服务列表
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**检查时间**: 2026-02-01
|
||
|
|
**检查人员**: Kiro AI
|
||
|
|
**结论**: 后端配置正确,需要重启服务
|