admin/AMT_NO_LOGS_FIX.md
lvfengfree 8b07d8f52a feat: 实现 AMT 设备自动添加功能(仅 Digest 认证)
- 添加 AMT Digest 认证服务 (AmtDigestService)
- 添加 AMT 模拟服务用于测试 (AmtMockService)
- 更新设备控制器支持 AMT 连接测试和设备信息获取
- 前端添加 AMT 自动添加方式,支持手动输入和凭证选择
- 移除 Basic 认证,仅使用 Digest 认证
- 添加 Apache HttpClient 依赖支持 Digest 认证
- 创建相关文档和测试脚本
2026-03-01 14:51:35 +08:00

5.6 KiB
Raw Blame History

AMT 功能无日志问题修复指南

问题描述

点击"测试连接"后,后端没有任何日志输出,直接显示超时错误。

可能原因

  1. 代码未编译:新添加的代码没有被编译
  2. 后端未重启:修改后没有重启后端服务
  3. 请求未到达后端:前端请求没有正确发送到后端
  4. 端口问题:后端端口被占用或配置错误

解决步骤

步骤 1停止当前后端服务

如果后端正在运行,先停止它:

  • 在运行后端的命令行窗口按 Ctrl+C
  • 或者关闭运行后端的窗口

步骤 2重新编译并启动后端

运行以下脚本:

rebuild_backend_with_logs.bat

这个脚本会:

  1. 清理旧的编译文件
  2. 重新编译所有代码
  3. 启动后端服务并显示详细日志

步骤 3验证后端是否正常运行

在新的命令行窗口运行:

test_amt_api.bat

这个脚本会测试:

  1. 后端是否运行
  2. AMT API 是否可访问
  3. 模拟模式状态

步骤 4查看日志输出

启动后端后,你应该能看到类似的日志:

2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [main] c.s.a.Application : Starting Application
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [main] c.s.a.Application : Started Application in x.xxx seconds

当你点击"测试连接"时,应该看到:

2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求IP: 192.168.1.100, 模拟模式: false
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用真实 AMT 服务测试连接
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 开始测试 AMT 连接IP: 192.168.1.100
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 使用手动输入的凭证,用户名: admin
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 准备发送 WS-Management 请求到: 192.168.1.100

步骤 5如果仍然没有日志

5.1 检查后端是否真的在运行

netstat -ano | findstr 8080

应该看到端口 8080 被占用。

5.2 检查前端请求是否发送

打开浏览器开发者工具F12切换到 Network 标签,点击"测试连接",查看是否有请求发送到 /device/amt/test

5.3 检查请求 URL

确认前端请求的 URL 是:

POST http://localhost:8080/device/amt/test

5.4 检查 CORS 问题

如果看到 CORS 错误,需要在后端添加 CORS 配置。

步骤 6使用模拟模式测试

如果真实 AMT 连接有问题,先用模拟模式测试功能:

方法 1修改代码

编辑 backend/src/main/java/com/soybean/admin/controller/DeviceController.java

// 将这一行
private boolean useMockMode = false;

// 改为
private boolean useMockMode = true;

然后重新编译并启动。

方法 2使用 API 切换

发送 POST 请求:

curl -X POST http://localhost:8080/device/amt/toggleMock

或者在浏览器中访问:

http://localhost:8080/device/amt/toggleMock

步骤 7测试模拟模式

启用模拟模式后:

  1. IP 地址:任意(如 192.168.1.100
  2. 用户名:admin
  3. 密码:admin
  4. 点击"测试连接"

应该会成功并显示日志:

2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求IP: 192.168.1.100, 模拟模式: true
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用模拟模式测试连接
2024-xx-xx xx:xx:xx.xxx  INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : AMT 测试连接结果: true

常见问题

Q1: 编译失败

错误mvn clean compile 失败

解决

  1. 检查 Java 版本:java -version(需要 Java 8 或更高)
  2. 检查 Maven 版本:mvn -version
  3. 查看错误信息,可能缺少依赖

Q2: 端口被占用

错误Port 8080 was already in use

解决

  1. 找到占用端口的进程:
    netstat -ano | findstr 8080
    
  2. 结束进程:
    taskkill /PID <进程ID> /F
    
  3. 或者修改端口(在 application.properties 中)

Q3: 前端请求超时

错误:前端显示 timeout of 10000ms exceeded

原因

  • 后端未运行
  • 后端处理请求时间过长
  • 网络问题

解决

  1. 确认后端正在运行
  2. 查看后端日志是否有错误
  3. 使用模拟模式测试

Q4: 看不到详细日志

解决

  1. 确认使用 rebuild_backend_with_logs.bat 启动
  2. 或者在 application.properties 中添加:
    logging.level.com.soybean.admin=DEBUG
    

验证清单

  • 后端已停止旧的进程
  • 运行了 rebuild_backend_with_logs.bat
  • 看到后端启动成功的日志
  • 端口 8080 正常监听
  • 运行了 test_amt_api.bat 验证 API
  • 前端可以访问
  • 点击"测试连接"时后端有日志输出

下一步

如果完成以上步骤后:

  1. 有日志但连接失败

    • 查看 AMT_TROUBLESHOOTING.md
    • 使用 quick_amt_test.bat 诊断网络
  2. 模拟模式正常

    • 说明代码和流程没问题
    • 专注于解决真实 AMT 连接问题
  3. 仍然没有日志

    • 检查防火墙设置
    • 检查前端配置
    • 查看浏览器控制台错误

获取帮助

如果问题仍未解决:

  1. 复制完整的错误信息
  2. 复制后端日志
  3. 复制浏览器控制台错误
  4. 说明已尝试的步骤