- 添加 AMT Digest 认证服务 (AmtDigestService) - 添加 AMT 模拟服务用于测试 (AmtMockService) - 更新设备控制器支持 AMT 连接测试和设备信息获取 - 前端添加 AMT 自动添加方式,支持手动输入和凭证选择 - 移除 Basic 认证,仅使用 Digest 认证 - 添加 Apache HttpClient 依赖支持 Digest 认证 - 创建相关文档和测试脚本
222 lines
5.6 KiB
Markdown
222 lines
5.6 KiB
Markdown
# 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. 说明已尝试的步骤
|