From 125ed9dd187ddf4359dedcfed6151a23363fe4db Mon Sep 17 00:00:00 2001 From: Hao Miao <47212914+PushM@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:24:02 +0800 Subject: [PATCH 1/5] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E5=A4=8D=E7=99=BD?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E4=BF=AE=E6=94=B9=EF=BC=8Cauditstatus?= =?UTF-8?q?=E4=B8=BAstring=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/entity/whitelist/WhiteListObject.java | 2 +- .../realtime/protection/server/whitelist/WhiteListService.java | 2 +- .../protection/server/whitelist/WhiteListServiceTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/realtime/protection/configuration/entity/whitelist/WhiteListObject.java b/src/main/java/com/realtime/protection/configuration/entity/whitelist/WhiteListObject.java index 6d00af3..05dfe93 100644 --- a/src/main/java/com/realtime/protection/configuration/entity/whitelist/WhiteListObject.java +++ b/src/main/java/com/realtime/protection/configuration/entity/whitelist/WhiteListObject.java @@ -60,5 +60,5 @@ public class WhiteListObject { @JsonProperty("audit_status") @ExcelIgnore @Schema(description = "白名单对象审核状态(0为未审核,1为已退回,2为审核通过)", example = "2") - private String whiteListAuditStatus; + private Integer whiteListAuditStatus; } diff --git a/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java b/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java index 2cc4005..4057e3c 100644 --- a/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java +++ b/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java @@ -107,7 +107,7 @@ public class WhiteListService { throw new IllegalStateException("无法修改白名单信息,因为其并未处于" + AuditStatusEnum.AUDITED + "状态"); } - object.setWhiteListAuditStatus(AuditStatusEnum.PENDING.toString()); + object.setWhiteListAuditStatus(AuditStatusEnum.PENDING.getNum()); return whiteListMapper.updateWhiteListObject(id, object); } diff --git a/src/test/java/com/realtime/protection/server/whitelist/WhiteListServiceTest.java b/src/test/java/com/realtime/protection/server/whitelist/WhiteListServiceTest.java index 0da4d07..4c56573 100644 --- a/src/test/java/com/realtime/protection/server/whitelist/WhiteListServiceTest.java +++ b/src/test/java/com/realtime/protection/server/whitelist/WhiteListServiceTest.java @@ -67,7 +67,7 @@ class WhiteListServiceTest extends ProtectionApplicationTests { //object.setWhiteListId(7); object.setWhiteListName("test_update"); - whiteListService.updateWhiteListObject(7, object); + whiteListService.updateWhiteListObject(7189, object); } @Test From aef78a55b55f51f409f8b5f8b73397d22412f10f Mon Sep 17 00:00:00 2001 From: Hao Miao <47212914+PushM@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:54:40 +0800 Subject: [PATCH 2/5] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E5=A4=8Dquery=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=A7=84=E5=88=99=E6=B2=A1=E6=9C=89=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=98=B2=E6=8A=A4=E7=AD=89=E7=BA=A7=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mappers/DynamicRuleMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mappers/DynamicRuleMapper.xml b/src/main/resources/mappers/DynamicRuleMapper.xml index 5f387a0..a85038b 100644 --- a/src/main/resources/mappers/DynamicRuleMapper.xml +++ b/src/main/resources/mappers/DynamicRuleMapper.xml @@ -146,7 +146,7 @@ - + From 7429ef37a0afab5f0eb316d9597604284d4c48dc Mon Sep 17 00:00:00 2001 From: Hao Miao <47212914+PushM@users.noreply.github.com> Date: Sun, 28 Apr 2024 16:34:09 +0800 Subject: [PATCH 3/5] =?UTF-8?q?1=E3=80=81=E6=9B=B4=E6=96=B0fake=5Fdynamic?= =?UTF-8?q?=5Ftest=E7=9A=84fakecc=5Ftest=5Fsend2.py=E6=96=87=E4=BB=B6=202?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9fakecc=5Ftest=5Fsend2.py=E7=9B=B8?= =?UTF-8?q?=E5=BA=94=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fake_dynamic_test/fakecc_test_send2.py | 25 ++++++++++++++++++++++--- fake_dynamic_test/main.py | 2 +- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/fake_dynamic_test/fakecc_test_send2.py b/fake_dynamic_test/fakecc_test_send2.py index 14e3dc1..392640b 100644 --- a/fake_dynamic_test/fakecc_test_send2.py +++ b/fake_dynamic_test/fakecc_test_send2.py @@ -5,6 +5,17 @@ import json app = Flask(__name__) +import socket +import struct + + +def convert_ipv4_to_int(ip_str): + binary_ip = socket.inet_aton(ip_str) + # 使用 struct.unpack 解包二进制数据到一个大端整数 + ip_int = struct.unpack('!I', binary_ip)[0] + return ip_int + + def convert_ipv4_address(ip_int): return socket.inet_ntoa(struct.pack('!I', ip_int)) @@ -31,6 +42,7 @@ def format_data_to_json(test_data): src_ip_v4, dst_ip_v4, src_port_v4, dst_port_v4, protocol_v4 = parse_and_convert_ip(data_parts[1]) + formatted_data = { "task_id": 30650, "rule_id": 39, @@ -96,19 +108,26 @@ def kafka_send(): if request.method == 'POST' and request.is_json: data = request.get_json() - base_data = "1702017420-1-175833107,1921297587-310737541-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115" + base_data = "1702017420-1-175833107,2682412653-760391609-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115" + base_data2 = "1702017420-1-175833107,760391609-2682412653-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115" + for item in data: task_id = item.get('task_id', '') rule_id = item.get('rule_id', '') modified_data = f"{base_data}, {task_id}, {rule_id},{0}" + modified_data2 = f"{base_data2}, {task_id}, {rule_id},{0}" HOST = '127.0.0.1' PORT = 65432 + print(modified_data) send_test_data(HOST, PORT, modified_data) + send_test_data(HOST, PORT, modified_data2) - return jsonify({'message': 'Data processed successfully'}), 200 + return jsonify({"success": True, "code": 200}), 200 return jsonify({'error': 'Invalid request'}), 400 if __name__ == "__main__": - app.run(host='0.0.0.0', port=8081, debug=True) \ No newline at end of file + print("convert_ipv4_to_int:", convert_ipv4_to_int("159.226.94.109")) + print("convert_ipv4_to_int:", convert_ipv4_to_int("45.82.167.185")) + app.run(host='0.0.0.0', port=8088, debug=True) \ No newline at end of file diff --git a/fake_dynamic_test/main.py b/fake_dynamic_test/main.py index 1d07ecd..4339026 100644 --- a/fake_dynamic_test/main.py +++ b/fake_dynamic_test/main.py @@ -100,5 +100,5 @@ def start_server(host, port, topic): if __name__ == "__main__": HOST = '127.0.0.1' PORT = 65432 - TOPIC = 'topic-test' + TOPIC = 'topic-alert' start_server(HOST, PORT, TOPIC) From 3e7dd3a2bed3a13d2a1b7204d0e1873351f936b5 Mon Sep 17 00:00:00 2001 From: PushM <584406942@qq.com> Date: Mon, 29 Apr 2024 01:27:36 +0800 Subject: [PATCH 4/5] =?UTF-8?q?1=E3=80=81=E9=9D=99=E6=80=81=E8=A7=84?= =?UTF-8?q?=E5=88=99=E6=96=B0=E5=A2=9E=E5=92=8C=E4=BF=AE=E6=94=B9=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=99=BD=E5=90=8D=E5=8D=95=E8=A7=84=E5=88=99=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rule/staticrule/StaticRuleService.java | 28 +++++++++++++++---- .../server/whitelist/WhiteListService.java | 6 ++++ .../staticrule/StaticRuleServiceTest.java | 5 ++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java index 8e3f832..e5dab88 100644 --- a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java +++ b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java @@ -2,10 +2,12 @@ package com.realtime.protection.server.rule.staticrule; import com.alibaba.excel.util.ListUtils; import com.realtime.protection.configuration.entity.rule.staticrule.StaticRuleObject; +import com.realtime.protection.configuration.entity.whitelist.WhiteListObject; import com.realtime.protection.configuration.utils.SqlSessionWrapper; import com.realtime.protection.configuration.utils.enums.RuleEnum; import com.realtime.protection.configuration.utils.enums.audit.AuditStatusEnum; import com.realtime.protection.configuration.utils.enums.audit.AuditStatusValidator; +import com.realtime.protection.server.whitelist.WhiteListService; import lombok.SneakyThrows; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -14,10 +16,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Function; @Service @@ -25,11 +24,13 @@ public class StaticRuleService { private final StaticRuleMapper staticRuleMapper; private final SqlSessionWrapper sqlSessionWrapper; + private final WhiteListService whiteListService; - public StaticRuleService(StaticRuleMapper staticRuleMapper, SqlSessionWrapper sqlSessionWrapper) { + public StaticRuleService(StaticRuleMapper staticRuleMapper, SqlSessionWrapper sqlSessionWrapper, WhiteListService whiteListService) { this.staticRuleMapper = staticRuleMapper; this.sqlSessionWrapper = sqlSessionWrapper; + this.whiteListService = whiteListService; } private static int ipToInt(String ip) { @@ -69,6 +70,14 @@ public class StaticRuleService { if (!RuleEnum.checkValidate(object)) { throw new IllegalArgumentException("静态规则不符合指定的配置方法,请参考规则模板以配置静态规则"); } + List staticRuleObjects = new ArrayList<>(); + staticRuleObjects.add(object); + List whiteListsHit = whiteListService.whiteListStaticRulesObjectCheck(staticRuleObjects); + if (!whiteListsHit.isEmpty()) { + StringBuilder result = new StringBuilder(); + whiteListsHit.forEach(item -> result.append(item.getWhiteListName()).append(" ")); + throw new IllegalArgumentException("静态规则与白名单规则冲突,冲突白名单名称:"+result.toString().trim()); + } staticRuleMapper.newStaticRuleObject(object); return object.getStaticRuleId(); @@ -122,6 +131,15 @@ public class StaticRuleService { throw new IllegalArgumentException("静态规则不符合指定的配置方法,请参考规则模板以配置静态规则"); } + List staticRuleObjects = new ArrayList<>(); + staticRuleObjects.add(object); + List whiteListsHit = whiteListService.whiteListStaticRulesObjectCheck(staticRuleObjects); + if (!whiteListsHit.isEmpty()) { + StringBuilder result = new StringBuilder(); + whiteListsHit.forEach(item -> result.append(item.getWhiteListName()).append(" ")); + throw new IllegalArgumentException("静态规则与白名单规则冲突,冲突白名单名称:"+result.toString().trim()); + } + //判断当前静态规则是否能够修改---是否存在任务选择的静态规则?? //按id查询该静态规则的used_task_id字段,如果不为空,则不能修改 object.setStaticRuleModifyTime(LocalDateTime.now()); diff --git a/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java b/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java index 4057e3c..ded354f 100644 --- a/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java +++ b/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java @@ -157,6 +157,12 @@ public class WhiteListService { List staticRuleObjects = staticRuleMapper.queryStaticRuleByIds(staticRuleId); return whiteListMapper.whiteListCStaticRulesCheck(staticRuleObjects); + } + public List whiteListStaticRulesObjectCheck(List staticRuleObjects) { + //参数应该是指令,不管动态静态 + // 命中的whitelist列表:每一列包含ip port url + return whiteListMapper.whiteListCStaticRulesCheck(staticRuleObjects); + } @Transactional diff --git a/src/test/java/com/realtime/protection/server/rule/staticrule/StaticRuleServiceTest.java b/src/test/java/com/realtime/protection/server/rule/staticrule/StaticRuleServiceTest.java index 23466c6..cb5c99b 100644 --- a/src/test/java/com/realtime/protection/server/rule/staticrule/StaticRuleServiceTest.java +++ b/src/test/java/com/realtime/protection/server/rule/staticrule/StaticRuleServiceTest.java @@ -32,12 +32,11 @@ public class StaticRuleServiceTest extends ProtectionApplicationTests { staticRuleTest.setStaticRuleCreateUserId(2); staticRuleTest.setAuditStatus(0); - staticRuleTest.setStaticRuleSip("1.1.2.0"); - staticRuleTest.setStaticRuleMsip("255.255.255.0"); + staticRuleTest.setStaticRuleSip("2.2.2.2"); // staticRuleTest.setStaticRuleDip("1.1.1.2"); // staticRuleTest.setStaticRuleMdip("255.255.255.0"); - staticRuleTest.setStaticRuleSport(80); + staticRuleTest.setStaticRuleSport(11); staticRuleTest.setStaticRulePriority(1); staticRuleTest.setStaticRuleFrequency(1); From 03042f0affca49b45b9eaf79b36795e95acee9ab Mon Sep 17 00:00:00 2001 From: PushM <584406942@qq.com> Date: Mon, 29 Apr 2024 11:44:15 +0800 Subject: [PATCH 5/5] =?UTF-8?q?1=E3=80=81=E9=9D=99=E6=80=81=E8=A7=84?= =?UTF-8?q?=E5=88=99=E3=80=81=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=99=E3=80=81?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=96=B0?= =?UTF-8?q?=E5=A2=9Eid=E3=80=81auditstatus=E5=90=88=E6=B3=95=E6=80=A7?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=202=E3=80=81Template=E6=96=B0=E5=A2=9Eaudits?= =?UTF-8?q?tatus=E5=B1=9E=E6=80=A7=EF=BC=8C=E4=BF=AE=E6=94=B9query?= =?UTF-8?q?=E8=BF=94=E5=9B=9Eauditstatus=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/defense/template/Template.java | 5 ++ .../defense/template/TemplateController.java | 42 ++++++++++++ .../defense/template/TemplateMapper.java | 4 ++ .../defense/template/TemplateService.java | 67 ++++++++++++++++++- .../dynamicrule/DynamicRuleController.java | 2 +- .../rule/dynamicrule/DynamicRuleMapper.java | 2 + .../rule/dynamicrule/DynamicRuleService.java | 22 ++++++ .../rule/staticrule/StaticRuleMapper.java | 2 + .../rule/staticrule/StaticRuleService.java | 19 ++++++ .../protection/server/task/TaskMapper.java | 2 + .../protection/server/task/TaskService.java | 25 +++++-- .../resources/mappers/DynamicRuleMapper.xml | 8 +++ .../resources/mappers/StaticRuleMapper.xml | 9 +++ src/main/resources/mappers/TaskMapper.xml | 8 +++ src/main/resources/mappers/TemplateMapper.xml | 13 ++++ .../defense/template/TemplateServiceTest.java | 17 ++--- .../staticrule/StaticRuleServiceTest.java | 6 +- 17 files changed, 236 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/realtime/protection/configuration/entity/defense/template/Template.java b/src/main/java/com/realtime/protection/configuration/entity/defense/template/Template.java index 94c43e1..8efd390 100644 --- a/src/main/java/com/realtime/protection/configuration/entity/defense/template/Template.java +++ b/src/main/java/com/realtime/protection/configuration/entity/defense/template/Template.java @@ -73,6 +73,11 @@ public class Template { @Schema(description = "防御策略模板创建人处室", example = "xxx", accessMode = Schema.AccessMode.READ_ONLY) private String createDepart; + @JsonProperty("audit_status") + @Schema(description = "防御策略模板审核状态(0为未审核,1为已退回,2为审核通过)", example = "1", accessMode = Schema.AccessMode.READ_ONLY) + private String auditStatus; + + /** * 设置是否含有日常/应急/紧急防护等级态字段的字段 */ diff --git a/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java b/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java index 399b61a..ef45b31 100644 --- a/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java +++ b/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java @@ -129,4 +129,46 @@ public class TemplateController implements TemplateControllerApi { AuditStatusEnum.getNumByState(AuditStatusEnum.PENDING.getState()) )); } + + + /** + * 审批 + */ + @GetMapping("/{id}/audit/{auditStatus}") + public ResponseResult updateTemplateAuditStatus(@PathVariable Integer id, @PathVariable Integer auditStatus) { + if (id <= 0 || auditStatus < 0 || auditStatus > 2) { + return new ResponseResult(400, "id or status is invalid") + .setData("template_id", id) + .setData("success", false); + } + return ResponseResult.ok() + .addDataMap(templateService.updateAuditStatus(id, auditStatus)) + .setData("template_id", id); + } + + /** + * 批量审批 + */ + /* + @PostMapping("/auditbatch") + public ResponseResult updateDynamicRuleAuditStatusBatch(@RequestBody Map idsWithAuditStatusMap) { + List errorIds = new ArrayList<>(); + for (Map.Entry entry: idsWithAuditStatusMap.entrySet()) { + Integer id = entry.getKey(); + Integer auditStatus = entry.getValue(); + if (id <= 0 || auditStatus < 0 || auditStatus > 2) { + errorIds.add(id); + } + } + if (!errorIds.isEmpty()){ + return new ResponseResult(400, "id or status is invalid") + .setData("staticRule_id", errorIds) + .setData("success", false); + } + + return ResponseResult.ok(); + +// .setData("success",dynamicRuleService.updateAuditStatusBatch(idsWithAuditStatusMap)); + } +*/ } diff --git a/src/main/java/com/realtime/protection/server/defense/template/TemplateMapper.java b/src/main/java/com/realtime/protection/server/defense/template/TemplateMapper.java index 7c036ad..0615c4f 100644 --- a/src/main/java/com/realtime/protection/server/defense/template/TemplateMapper.java +++ b/src/main/java/com/realtime/protection/server/defense/template/TemplateMapper.java @@ -42,4 +42,8 @@ public interface TemplateMapper { Integer queryUsedTemplateTotalNum(); Integer queryAuditTemplateTotalNum(Integer auditState); + + Integer queryAuditStatusById(Integer id); + + Boolean updateAuditStatusById(Integer id, Integer auditStatus); } diff --git a/src/main/java/com/realtime/protection/server/defense/template/TemplateService.java b/src/main/java/com/realtime/protection/server/defense/template/TemplateService.java index ffdad26..be94578 100644 --- a/src/main/java/com/realtime/protection/server/defense/template/TemplateService.java +++ b/src/main/java/com/realtime/protection/server/defense/template/TemplateService.java @@ -1,11 +1,14 @@ package com.realtime.protection.server.defense.template; import com.realtime.protection.configuration.entity.defense.template.Template; -import lombok.SneakyThrows; +import com.realtime.protection.configuration.utils.enums.audit.AuditStatusValidator; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service public class TemplateService { @@ -87,4 +90,66 @@ public class TemplateService { public Integer queryAuditTemplateTotalNum(Integer auditState) { return templateMapper.queryAuditTemplateTotalNum(auditState); } + + public Map updateAuditStatus(Integer id, Integer auditStatus) { + Integer originalAuditStatus = templateMapper.queryAuditStatusById(id); + if (originalAuditStatus == null) { + throw new IllegalArgumentException("cannot find audit status of static rule " + id + ", maybe static rule doesn't exist?"); + } + if (!AuditStatusValidator.setOriginal(originalAuditStatus).checkValidate(auditStatus)) { + throw new IllegalArgumentException("invalid audit status"); + } + Boolean success = templateMapper.updateAuditStatusById(id, auditStatus); + + Map resultMap = new HashMap<>(); + resultMap.put("success", success); + resultMap.put("audit_status", auditStatus); + return resultMap; + } +/* + + public Map updateAuditStatus(Integer id, Integer auditStatus) { + Integer originalAuditStatus = templateMapper.queryAuditStatusById(id); + if (originalAuditStatus == null) { + throw new IllegalArgumentException("cannot find audit status of static rule " + id + ", maybe static rule doesn't exist?"); + } + if (!AuditStatusValidator.setOriginal(originalAuditStatus).checkValidate(auditStatus)) { + throw new IllegalArgumentException("invalid audit status"); + } + Boolean success = templateMapper.updateAuditStatusById(id, auditStatus); + + Map resultMap = new HashMap<>(); + resultMap.put("success", success); + resultMap.put("audit_status", auditStatus); + return resultMap; + } + + public Object updateAuditStatusBatch(Map idsWithAuditStatusMap) { + Function, Boolean>> updateDynamicRuleAuditStatusFunction = + mapper -> map -> { + if (map == null || map.isEmpty()) { + return false; + } + + Map idWithAuditStatusBatch = new HashMap<>(); + for (Map.Entry item : map.entrySet()) { + idWithAuditStatusBatch.put(item.getKey(), item.getValue()); + if (idWithAuditStatusBatch.size() < 100) { + continue; + } + //mapper指的就是外层函数输入的参数,也就是WhiteListMapper + mapper.updateAuditStatusByIdBatch(idWithAuditStatusBatch); + idWithAuditStatusBatch.clear(); + } + if (!idWithAuditStatusBatch.isEmpty()) { + mapper.updateAuditStatusByIdBatch(idWithAuditStatusBatch); + } + return true; + }; + //实现事务操作 + return sqlSessionWrapper.startBatchSession(DynamicRuleMapper.class, updateDynamicRuleAuditStatusFunction, idsWithAuditStatusMap); + + } + */ + } diff --git a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleController.java b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleController.java index 83ef29a..871f08b 100644 --- a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleController.java +++ b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleController.java @@ -130,7 +130,7 @@ public class DynamicRuleController implements DynamicRuleControllerApi { public ResponseResult updateDynamicRuleAuditStatus(@PathVariable Integer id, @PathVariable Integer auditStatus) { if (id <= 0 || auditStatus < 0 || auditStatus > 2) { return new ResponseResult(400, "id or status is invalid") - .setData("staticRule_id", id) + .setData("dynamicRule_id", id) .setData("success", false); } return ResponseResult.ok() diff --git a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleMapper.java b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleMapper.java index 7d589fb..8656c39 100644 --- a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleMapper.java +++ b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleMapper.java @@ -58,4 +58,6 @@ public interface DynamicRuleMapper { Boolean updateAuditStatusById(Integer dynamicRuleId, Integer auditStatus); void updateAuditStatusByIdBatch(@Param("idWithAuditStatusBatch") Map idWithAuditStatusBatch); + + List queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map idsWithAuditStatusMap); } diff --git a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleService.java b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleService.java index b864643..d56279f 100644 --- a/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleService.java +++ b/src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleService.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -211,6 +212,27 @@ public class DynamicRuleService { } public Object updateAuditStatusBatch(Map idsWithAuditStatusMap) { + //校验id和status是否合法 + List originalAuditStatusList = dynamicRuleMapper.queryAuditStatusByIds(idsWithAuditStatusMap); + int index = 0; + List errorIds = new ArrayList<>(); + for(Map.Entry entry: idsWithAuditStatusMap.entrySet()) { + Integer id = entry.getKey(); + Integer auditStatus = entry.getValue(); + Integer originalAuditStatus = originalAuditStatusList.get(index); + index++; + if (originalAuditStatus == null) { + errorIds.add(id); + } + if (!AuditStatusValidator.setOriginal(originalAuditStatus).checkValidate(auditStatus)) { + errorIds.add(id); + } + } + if (!errorIds.isEmpty()){ + return new IllegalArgumentException("动态规则id不存在或无法修改为对应审核状态, errorIds: " + errorIds); + } + + Function, Boolean>> updateDynamicRuleAuditStatusFunction = mapper -> map -> { if (map == null || map.isEmpty()) { diff --git a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleMapper.java b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleMapper.java index 6b6207d..309d091 100644 --- a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleMapper.java +++ b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleMapper.java @@ -50,4 +50,6 @@ public interface StaticRuleMapper { Integer queryUsedStaticRuleTotalNum(); Integer queryAuditStaticRuleTotalNum(@Param("auditStatus")Integer auditStatus); + + List queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map idsWithAuditStatusMap); } diff --git a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java index e5dab88..7068ff3 100644 --- a/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java +++ b/src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java @@ -235,6 +235,25 @@ public class StaticRuleService { } public Object updateAuditStatusBatch(Map idsWithAuditStatusMap) { + //校验id和status是否合法 + List originalAuditStatusList = staticRuleMapper.queryAuditStatusByIds(idsWithAuditStatusMap); + int index = 0; + List errorIds = new ArrayList<>(); + for(Map.Entry entry: idsWithAuditStatusMap.entrySet()) { + Integer id = entry.getKey(); + Integer auditStatus = entry.getValue(); + Integer originalAuditStatus = originalAuditStatusList.get(index); + index++; + if (originalAuditStatus == null) { + errorIds.add(id); + } + if (!AuditStatusValidator.setOriginal(originalAuditStatus).checkValidate(auditStatus)) { + errorIds.add(id); + } + } + if (!errorIds.isEmpty()){ + return new IllegalArgumentException("静态规则id不存在或无法修改为对应审核状态, errorIds: " + errorIds); + } Function, Boolean>> updateStaticRuleAuditStatusFunction = mapper -> map -> { diff --git a/src/main/java/com/realtime/protection/server/task/TaskMapper.java b/src/main/java/com/realtime/protection/server/task/TaskMapper.java index 30e79bb..d4bdb5b 100644 --- a/src/main/java/com/realtime/protection/server/task/TaskMapper.java +++ b/src/main/java/com/realtime/protection/server/task/TaskMapper.java @@ -66,4 +66,6 @@ public interface TaskMapper { void updateAuditStatusByIdBatch(@Param("idWithAuditStatusBatch") Map idWithAuditStatusBatch); Integer queryAuditTaskTotalNum(Integer auditState); + + List queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map idsWithAuditStatusMap); } diff --git a/src/main/java/com/realtime/protection/server/task/TaskService.java b/src/main/java/com/realtime/protection/server/task/TaskService.java index 0f39b7f..cffd3a9 100644 --- a/src/main/java/com/realtime/protection/server/task/TaskService.java +++ b/src/main/java/com/realtime/protection/server/task/TaskService.java @@ -17,10 +17,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -324,6 +321,26 @@ public class TaskService { } public Object updateAuditStatusBatch(Map idsWithAuditStatusMap) { + //校验id和status是否合法 + List originalAuditStatusList = taskMapper.queryAuditStatusByIds(idsWithAuditStatusMap); + int index = 0; + List errorIds = new ArrayList<>(); + for(Map.Entry entry: idsWithAuditStatusMap.entrySet()) { + Integer id = entry.getKey(); + Integer auditStatus = entry.getValue(); + Integer originalAuditStatus = originalAuditStatusList.get(index); + index++; + if (originalAuditStatus == null) { + errorIds.add(id); + } + if (!AuditStatusValidator.setOriginal(originalAuditStatus).checkValidate(auditStatus)) { + errorIds.add(id); + } + } + if (!errorIds.isEmpty()){ + return new IllegalArgumentException("动态规则id不存在或无法修改为对应审核状态, errorIds: " + errorIds); + } + Function, Boolean>> updateTaskAuditStatusFunction = mapper -> map -> { if (map == null || map.isEmpty()) { diff --git a/src/main/resources/mappers/DynamicRuleMapper.xml b/src/main/resources/mappers/DynamicRuleMapper.xml index a85038b..4c926ee 100644 --- a/src/main/resources/mappers/DynamicRuleMapper.xml +++ b/src/main/resources/mappers/DynamicRuleMapper.xml @@ -283,6 +283,14 @@ from t_dynamic_rule where dynamic_rule_id = #{dynamicRuleId} + \ No newline at end of file diff --git a/src/main/resources/mappers/StaticRuleMapper.xml b/src/main/resources/mappers/StaticRuleMapper.xml index 5270807..e0b1ce5 100644 --- a/src/main/resources/mappers/StaticRuleMapper.xml +++ b/src/main/resources/mappers/StaticRuleMapper.xml @@ -217,4 +217,13 @@ WHERE static_rule_audit_status = #{auditStatus} + + \ No newline at end of file diff --git a/src/main/resources/mappers/TaskMapper.xml b/src/main/resources/mappers/TaskMapper.xml index 2d4e400..32322e5 100644 --- a/src/main/resources/mappers/TaskMapper.xml +++ b/src/main/resources/mappers/TaskMapper.xml @@ -333,4 +333,12 @@ SELECT COUNT(*) FROM t_task WHERE task_audit_status = #{auditStatus} + \ No newline at end of file diff --git a/src/main/resources/mappers/TemplateMapper.xml b/src/main/resources/mappers/TemplateMapper.xml index 68c83b9..4a73691 100644 --- a/src/main/resources/mappers/TemplateMapper.xml +++ b/src/main/resources/mappers/TemplateMapper.xml @@ -36,6 +36,7 @@ + @@ -157,6 +158,12 @@ WHERE audit_state = #{auditState} + + UPDATE t_strategy_template @@ -168,4 +175,10 @@ AND strategy_template_id = #{template.templateId} + + + UPDATE t_strategy_template + SET audit_state = #{auditState} + WHERE strategy_template_id = #{id} + \ No newline at end of file diff --git a/src/test/java/com/realtime/protection/server/defense/template/TemplateServiceTest.java b/src/test/java/com/realtime/protection/server/defense/template/TemplateServiceTest.java index cce2ea4..2e91ee3 100644 --- a/src/test/java/com/realtime/protection/server/defense/template/TemplateServiceTest.java +++ b/src/test/java/com/realtime/protection/server/defense/template/TemplateServiceTest.java @@ -68,7 +68,7 @@ class TemplateServiceTest extends ProtectionApplicationTests { System.out.println(e.getMessage()); } - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 2; i++) { assertThrows(DuplicateKeyException.class, () -> { Integer templateId = templateService.newTemplate(template); assertTrue(templateId > 0); @@ -84,13 +84,14 @@ class TemplateServiceTest extends ProtectionApplicationTests { @Test void testQueryTemplate() { List