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

222 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AMT 功能无日志问题修复指南
## 问题描述
点击"测试连接"后,后端没有任何日志输出,直接显示超时错误。
## 可能原因
1. **代码未编译**:新添加的代码没有被编译
2. **后端未重启**:修改后没有重启后端服务
3. **请求未到达后端**:前端请求没有正确发送到后端
4. **端口问题**:后端端口被占用或配置错误
## 解决步骤
### 步骤 1停止当前后端服务
如果后端正在运行,先停止它:
- 在运行后端的命令行窗口按 `Ctrl+C`
- 或者关闭运行后端的窗口
### 步骤 2重新编译并启动后端
运行以下脚本:
```batch
rebuild_backend_with_logs.bat
```
这个脚本会:
1. 清理旧的编译文件
2. 重新编译所有代码
3. 启动后端服务并显示详细日志
### 步骤 3验证后端是否正常运行
在新的命令行窗口运行:
```batch
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 检查后端是否真的在运行
```batch
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`
```java
// 将这一行
private boolean useMockMode = false;
// 改为
private boolean useMockMode = true;
```
然后重新编译并启动。
#### 方法 2使用 API 切换
发送 POST 请求:
```batch
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. 找到占用端口的进程:
```batch
netstat -ano | findstr 8080
```
2. 结束进程:
```batch
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` 中添加:
```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. 说明已尝试的步骤