- 添加 AMT Digest 认证服务 (AmtDigestService) - 添加 AMT 模拟服务用于测试 (AmtMockService) - 更新设备控制器支持 AMT 连接测试和设备信息获取 - 前端添加 AMT 自动添加方式,支持手动输入和凭证选择 - 移除 Basic 认证,仅使用 Digest 认证 - 添加 Apache HttpClient 依赖支持 Digest 认证 - 创建相关文档和测试脚本
5.6 KiB
5.6 KiB
AMT 功能无日志问题修复指南
问题描述
点击"测试连接"后,后端没有任何日志输出,直接显示超时错误。
可能原因
- 代码未编译:新添加的代码没有被编译
- 后端未重启:修改后没有重启后端服务
- 请求未到达后端:前端请求没有正确发送到后端
- 端口问题:后端端口被占用或配置错误
解决步骤
步骤 1:停止当前后端服务
如果后端正在运行,先停止它:
- 在运行后端的命令行窗口按
Ctrl+C - 或者关闭运行后端的窗口
步骤 2:重新编译并启动后端
运行以下脚本:
rebuild_backend_with_logs.bat
这个脚本会:
- 清理旧的编译文件
- 重新编译所有代码
- 启动后端服务并显示详细日志
步骤 3:验证后端是否正常运行
在新的命令行窗口运行:
test_amt_api.bat
这个脚本会测试:
- 后端是否运行
- AMT API 是否可访问
- 模拟模式状态
步骤 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:测试模拟模式
启用模拟模式后:
- IP 地址:任意(如 192.168.1.100)
- 用户名:
admin - 密码:
admin - 点击"测试连接"
应该会成功并显示日志:
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 失败
解决:
- 检查 Java 版本:
java -version(需要 Java 8 或更高) - 检查 Maven 版本:
mvn -version - 查看错误信息,可能缺少依赖
Q2: 端口被占用
错误:Port 8080 was already in use
解决:
- 找到占用端口的进程:
netstat -ano | findstr 8080 - 结束进程:
taskkill /PID <进程ID> /F - 或者修改端口(在
application.properties中)
Q3: 前端请求超时
错误:前端显示 timeout of 10000ms exceeded
原因:
- 后端未运行
- 后端处理请求时间过长
- 网络问题
解决:
- 确认后端正在运行
- 查看后端日志是否有错误
- 使用模拟模式测试
Q4: 看不到详细日志
解决:
- 确认使用
rebuild_backend_with_logs.bat启动 - 或者在
application.properties中添加:logging.level.com.soybean.admin=DEBUG
验证清单
- 后端已停止旧的进程
- 运行了
rebuild_backend_with_logs.bat - 看到后端启动成功的日志
- 端口 8080 正常监听
- 运行了
test_amt_api.bat验证 API - 前端可以访问
- 点击"测试连接"时后端有日志输出
下一步
如果完成以上步骤后:
-
有日志但连接失败:
- 查看
AMT_TROUBLESHOOTING.md - 使用
quick_amt_test.bat诊断网络
- 查看
-
模拟模式正常:
- 说明代码和流程没问题
- 专注于解决真实 AMT 连接问题
-
仍然没有日志:
- 检查防火墙设置
- 检查前端配置
- 查看浏览器控制台错误
获取帮助
如果问题仍未解决:
- 复制完整的错误信息
- 复制后端日志
- 复制浏览器控制台错误
- 说明已尝试的步骤