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