✅ 所有功能已成功部署
- ✅ Controller新增7个接口
- ✅ Service实现所有业务逻辑
- ✅ Repository & Mapper完整实现
- ✅ 定时清理任务已配置
- ✅ 前端API接口已更新
访问地址:http://your-host:port/platform/swagger-ui.html
在Swagger中找到 白名单管理接口 模块,可以看到以下新增接口:
- ✅ POST
/whitelist/findWhitelistPage- 查询白名单分页列表 - ✅ POST
/whitelist/addWhitelist- 添加白名单 - ✅ POST
/whitelist/updateWhitelist- 更新白名单 - ✅ POST
/whitelist/deleteWhitelist- 删除白名单 - ✅ GET
/whitelist/getWhitelistDetail- 查询白名单详情 - ✅ GET
/whitelist/findWhitelistAccessLogPage- 查询访问日志分页列表 - ✅ GET
/whitelist/getWhitelistAccessLogDetail- 查询访问日志详情 - ✅ GET
/whitelist/getWhitelistAccessStatistics- 查询访问统计
- ⭐ POST
/whitelist/batchDeleteAccessLog- 批量删除访问日志 - ⭐ POST
/whitelist/cleanExpiredLogs- 清理过期日志 - ⭐ GET
/whitelist/exportAccessLog- 导出访问日志 - ⭐ GET
/whitelist/getAccessTrend- 获取访问趋势 - ⭐ GET
/whitelist/getTopAccessIps- 获取IP访问排行 - ⭐ GET
/whitelist/getTopAccessUrls- 获取URL访问排行 - ⭐ GET
/whitelist/getAccessDetailStatistics- 获取访问详细统计
首先需要在数据库中插入一些测试日志数据:
-- 插入测试访问日志
INSERT INTO whitelist_access_log
(whitelist_id, access_ip, access_url, request_method, access_result, response_code, response_time, access_time)
VALUES
(NULL, '192.168.1.100', '/api/user/info', 'GET', 'SUCCESS', 200, 45, NOW()),
(NULL, '192.168.1.101', '/api/data/list', 'GET', 'SUCCESS', 200, 120, NOW()),
(NULL, '192.168.1.102', '/api/user/login', 'POST', 'DENIED', 403, 30, NOW()),
(NULL, '192.168.1.100', '/api/user/info', 'GET', 'SUCCESS', 200, 50, NOW() - INTERVAL 1 DAY),
(NULL, '192.168.1.103', '/api/admin/config', 'GET', 'ERROR', 500, 200, NOW() - INTERVAL 2 DAY),
(NULL, '192.168.1.100', '/api/data/list', 'GET', 'SUCCESS', 200, 80, NOW() - INTERVAL 3 DAY),
(NULL, '192.168.1.104', '/api/user/info', 'GET', 'SUCCESS', 200, 60, NOW() - INTERVAL 4 DAY),
(NULL, '192.168.1.101', '/api/data/export', 'GET', 'DENIED', 403, 25, NOW() - INTERVAL 5 DAY),
(NULL, '10.0.0.50', '/api/system/health', 'GET', 'SUCCESS', 200, 15, NOW() - INTERVAL 6 DAY),
(NULL, '10.0.0.51', '/api/user/logout', 'POST', 'SUCCESS', 200, 35, NOW() - INTERVAL 7 DAY);执行命令:
docker exec mysql mysql -uroot -proot privacy1 < test_data.sql接口: GET /whitelist/getAccessTrend?days=7
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"trendList": [
{
"date": "2026-01-10",
"totalCount": 3,
"successCount": 2,
"deniedCount": 1,
"errorCount": 0
}
],
"days": 7
}
}接口: GET /whitelist/getTopAccessIps?limit=5
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"topIps": [
{
"ip": "192.168.1.100",
"accessCount": 3,
"successCount": 3,
"deniedCount": 0,
"lastAccessTime": "2026-01-10 13:00:00"
}
]
}
}接口: GET /whitelist/getTopAccessUrls?limit=5
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"topUrls": [
{
"url": "/api/user/info",
"accessCount": 4,
"successCount": 4,
"deniedCount": 0,
"avgResponseTime": 50.0
}
]
}
}接口: GET /whitelist/getAccessDetailStatistics
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"totalCount": 10,
"uniqueIpCount": 6,
"uniqueUrlCount": 7,
"successCount": 7,
"deniedCount": 2,
"errorCount": 1,
"avgResponseTime": 65.0,
"maxResponseTime": 200,
"minResponseTime": 15
}
}接口: GET /whitelist/exportAccessLog
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"list": [
{...},
{...}
],
"total": 10
}
}接口: POST /whitelist/batchDeleteAccessLog
请求Body:
[1, 2, 3]预期响应:
{
"code": 0,
"msg": "请求成功"
}接口: POST /whitelist/cleanExpiredLogs?days=30
预期响应:
{
"code": 0,
"msg": "请求成功",
"result": {
"deletedCount": 0,
"beforeDate": "2025-12-11 13:00:00"
}
}# 查看定时任务是否已加载
docker logs application0 2>&1 | grep "WhitelistLogCleanTask"
# 等待到凌晨2点后查看清理日志
docker logs application0 2>&1 | grep "白名单访问日志清理任务"如果不想等到凌晨2点,可以临时修改定时任务的cron表达式进行测试。
在前端"访问日志记录"页面中,应该能够:
- ✅ 查看日志列表(分页)
- ✅ 筛选日志(按IP、URL、结果、时间)
- ✅ 查看日志详情
- ✅ 批量删除日志(选中多条后点击删除)
- ✅ 导出日志(下载Excel或CSV)
- ✅ 查看统计图表(访问趋势图)
- ✅ 查看排行榜(TOP IP、TOP URL)
- ✅ 查看详细统计数据
- ✅ 清理过期日志(管理员功能)
插入10万条测试数据:
-- 创建存储过程生成测试数据
DELIMITER //
CREATE PROCEDURE generate_test_logs(IN num INT)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < num DO
INSERT INTO whitelist_access_log
(access_ip, access_url, request_method, access_result, response_code, response_time, access_time)
VALUES
(CONCAT('192.168.', FLOOR(1 + RAND() * 255), '.', FLOOR(1 + RAND() * 255)),
CONCAT('/api/', SUBSTRING(MD5(RAND()), 1, 10)),
'GET',
CASE FLOOR(RAND() * 3) WHEN 0 THEN 'SUCCESS' WHEN 1 THEN 'DENIED' ELSE 'ERROR' END,
200,
FLOOR(10 + RAND() * 1000),
DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 30) DAY));
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 执行生成10万条数据
CALL generate_test_logs(100000);测试各个接口在大数据量下的响应时间:
- 列表查询:应 < 500ms
- 趋势分析:应 < 1s
- 排行查询:应 < 500ms
- 详细统计:应 < 800ms
- 导出功能:应 < 3s(10000条)
检查Gateway路由配置是否包含whitelist路由,并且没有StripPrefix=1
查看application日志:
docker logs application0 2>&1 | grep -i "error\|exception" | tail -50检查数据库表是否已创建:
docker exec mysql mysql -uroot -proot -e "SHOW TABLES FROM privacy1 LIKE '%whitelist%';"检查定时任务是否已加载:
docker logs application0 2>&1 | grep "WhitelistLogCleanTask"Q: 为什么导出限制10000条? A: 为了防止一次性导出大量数据导致内存溢出。如需导出更多数据,建议分批导出或使用数据库导出工具。
Q: 定时清理任务会不会误删数据? A: 默认清理30天前的数据,这个时间可以在代码中配置。建议定期备份数据库。
Q: 如何临时关闭定时清理?
A: 可以在配置文件中设置spring.task.scheduling.enabled=false或注释掉@Scheduled注解。
Q: 统计数据不准确? A: 检查数据库时区设置,确保与应用服务器时区一致。
本次更新大幅增强了白名单访问日志的管理能力,提供了:
- 📊 丰富的统计分析 - 趋势、排行、详细指标
- 🗑️ 灵活的数据管理 - 批量删除、定时清理、导出
- ⚡ 高性能查询 - 索引优化、分页、缓存
- 🔧 易于维护 - 自动化任务、完整日志
所有功能已部署到生产环境,可以开始测试使用!