peixue-dev/Archive/[一次性]后端服务接口匿名访问配置检查-2026-02-01.md

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
**结论**: 后端配置正确,需要重启服务