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

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. 路径匹配问题 - 实际请求路径与配置的排除路径不匹配
  3. 其他拦截器 - 可能有其他拦截器在起作用

解决方案

方案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());

重启后端后,查看控制台日志,确认:

  1. 服务接口的请求是否进入了JWT拦截器
  2. 如果进入了,说明排除配置没有生效

测试步骤

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拦截器。

前端配置

前端已经正确配置:

  1. 游客白名单

    const GUEST_ALLOWED_URLS = [
      '/api/service/list',
      '/api/service/search',
      '/api/category/all',
      // ...
    ]
    
  2. 不发送token

    // 添加token到请求头(如果有token)
    if (token) {
      header['Authorization'] = buildAuthHeader(token)
    }
    
  3. 静默处理401

    if (isGuest && isGuestAllowedUrl(options.url)) {
      reject({ code: 401, message: '未登录', silent: true })
      return
    }
    

结论

后端配置是正确的,问题可能是:

  1. 后端服务没有重启,配置未生效
  2. 需要清除后端编译缓存

建议操作:

  1. 重启后端服务
  2. 清除前端缓存并重新编译
  3. 测试游客访问服务列表

检查时间: 2026-02-01
检查人员: Kiro AI
结论: 后端配置正确,需要重启服务