From 1b38276701d406554603fd1d39b0a569134eaf1c Mon Sep 17 00:00:00 2001 From: EnderByEndera <707475564@qq.com> Date: Thu, 25 Apr 2024 12:09:23 +0800 Subject: [PATCH] =?UTF-8?q?1.=20DynamicRuleMapper=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0audit=5Fstatus=20result=E6=98=A0=E5=B0=84=202.=20?= =?UTF-8?q?=E7=BB=99DynamicTaskInfo=E5=AE=9E=E4=BD=93=E7=B1=BB=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=80=E6=9C=89=E5=AD=97=E6=AE=B5=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84Json=E5=AD=97=E6=AE=B5=203.=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9sendFilter=E5=87=BD=E6=95=B0=E4=B8=AD=E7=9A=84WebClien?= =?UTF-8?q?t=E5=88=9D=E5=A7=8B=E5=8C=96URL=E5=92=8CURI=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9mono.block=E7=9A=84=E8=B6=85=E6=97=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=AF=B9response=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=ADsuccess=E7=9A=84=E5=88=A4=E6=96=AD=204.=20?= =?UTF-8?q?=E5=B0=86TaskMapper=E4=B8=AD=E7=9A=84getDynamicTaskInfos=20sele?= =?UTF-8?q?ct=E8=AF=AD=E5=8F=A5=E7=9A=84INNER=20JOIN=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BALEFT=20JOIN=205.=20updateStaticRUleAuditStatusInTask?= =?UTF-8?q?=E5=92=8CupdateDynamicRuleAuditStatusInTask=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9staticRuleIds=E5=88=97=E8=A1=A8=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=8C=E7=A1=AE=E4=BF=9DSQL=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E5=87=BA=E7=8E=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/task/DynamicTaskInfo.java | 22 +++++++++++++++++++ .../protection/server/task/TaskService.java | 14 ++++++++++-- .../server/task/status/StateHandler.java | 12 +++++----- .../resources/mappers/DynamicRuleMapper.xml | 1 + src/main/resources/mappers/TaskMapper.xml | 13 ++++++----- 5 files changed, 49 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/realtime/protection/configuration/entity/task/DynamicTaskInfo.java b/src/main/java/com/realtime/protection/configuration/entity/task/DynamicTaskInfo.java index 30b07fa..3d2e42a 100644 --- a/src/main/java/com/realtime/protection/configuration/entity/task/DynamicTaskInfo.java +++ b/src/main/java/com/realtime/protection/configuration/entity/task/DynamicTaskInfo.java @@ -1,5 +1,6 @@ package com.realtime.protection.configuration.entity.task; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -10,23 +11,44 @@ public class DynamicTaskInfo { @Data private static class SimpleProtectObject { + + @JsonProperty("ip") private String IP; + + @JsonProperty("port") private Integer port; + + @JsonProperty("url") private String URL; + + @JsonProperty("protocol") private String protocol; } // 从任务中获取 + @JsonProperty("task_id") private Long taskId; + + @JsonProperty("start_time") private LocalDateTime startTime; + + @JsonProperty("end_time") private LocalDateTime endTime; // 从规则中获取 + @JsonProperty("rule_id") private Integer ruleId; + + @JsonProperty("source_system") private String sourceSystem; + + @JsonProperty("event_type") private String eventType; + + @JsonProperty("log_rule_id") private Long logRuleId; // 从防护对象列表中获取 + @JsonProperty("protect_objects") private List protectObjects; } 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 307ed53..27bc307 100644 --- a/src/main/java/com/realtime/protection/server/task/TaskService.java +++ b/src/main/java/com/realtime/protection/server/task/TaskService.java @@ -92,7 +92,12 @@ public class TaskService { return; } - List staticRuleObjects = staticRuleMapper.queryStaticRuleByIds(taskMapper.queryDynamicRuleIdsFromTaskId(taskId)); + List staticRuleIds = taskMapper.queryStaticRuleIdsFromTaskId(taskId); + if (staticRuleIds == null || staticRuleIds.isEmpty()) { + return; + } + + List staticRuleObjects = staticRuleMapper.queryStaticRuleByIds(staticRuleIds); if (staticRuleObjects == null || staticRuleObjects.isEmpty()) { throw new IllegalArgumentException("静态规则列表中的ID不存在,请检查静态规则是否真实存在"); } @@ -147,7 +152,12 @@ public class TaskService { return; } - List dynamicRuleObjects = dynamicRuleMapper.queryDynamicRuleByIds(taskMapper.queryDynamicRuleIdsFromTaskId(taskId)); + List dynamicRuleIds = taskMapper.queryDynamicRuleIdsFromTaskId(taskId); + if (dynamicRuleIds == null || dynamicRuleIds.isEmpty()) { + return; + } + + List dynamicRuleObjects = dynamicRuleMapper.queryDynamicRuleByIds(dynamicRuleIds); if (dynamicRuleObjects == null || dynamicRuleObjects.isEmpty()) { throw new IllegalArgumentException("静态规则列表中的ID不存在,请检查静态规则是否真实存在"); } diff --git a/src/main/java/com/realtime/protection/server/task/status/StateHandler.java b/src/main/java/com/realtime/protection/server/task/status/StateHandler.java index 3b4712f..c169133 100644 --- a/src/main/java/com/realtime/protection/server/task/status/StateHandler.java +++ b/src/main/java/com/realtime/protection/server/task/status/StateHandler.java @@ -13,13 +13,14 @@ import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Mono; +import java.time.Duration; import java.util.List; import java.util.concurrent.atomic.AtomicReference; public class StateHandler { private final WebClient client = WebClient.builder() - .baseUrl("") // todo: unfinished + .baseUrl("http://192.168.107.89:9081") .build(); protected Boolean handleStart(TaskService taskService, CommandService commandService, Long taskId) { @@ -110,12 +111,12 @@ public class StateHandler { throw new IllegalArgumentException("动态规则列表为空,请至少选择一个动态规则以启动动态/研判后类型任务"); } - taskService.updateDynamicRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.AUDITED); + taskService.updateDynamicRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.USING); AtomicReference success = new AtomicReference<>(false); Mono mono = client.post() - .uri("http://192.168.107.89:9081/api/v1/kafkasend") // todo: untested + .uri("/api/v1/kafkasend") .bodyValue(dynamicTaskInfos) .exchangeToMono(res -> { if (res.statusCode().equals(HttpStatus.OK)) { @@ -126,9 +127,10 @@ public class StateHandler { }) .doOnError(WebClientResponseException.class, res -> success.set(false)); - SimpleResponse response = mono.block(); - if (response == null) { + SimpleResponse response = mono.block(Duration.ofSeconds(5)); + + if (response == null || response.getSuccess() == null) { return false; } diff --git a/src/main/resources/mappers/DynamicRuleMapper.xml b/src/main/resources/mappers/DynamicRuleMapper.xml index b65b933..5f387a0 100644 --- a/src/main/resources/mappers/DynamicRuleMapper.xml +++ b/src/main/resources/mappers/DynamicRuleMapper.xml @@ -150,6 +150,7 @@ + diff --git a/src/main/resources/mappers/TaskMapper.xml b/src/main/resources/mappers/TaskMapper.xml index 46a1677..5b47ece 100644 --- a/src/main/resources/mappers/TaskMapper.xml +++ b/src/main/resources/mappers/TaskMapper.xml @@ -257,7 +257,8 @@ - + @@ -274,16 +275,16 @@ strategy_template_source_system as source_system, strategy_template_name as event_type, tdr.log_rule_id, - INET_NTOA(protect_object_ip) as protect_object_ip, + INET_NTOA(protect_object_ip) as protect_object_ip, protect_object_port, protect_object_url, protect_object_protocol FROM t_task AS tt - INNER JOIN realtime_protection.t_dynamic_rule tdr on tt.task_id = tdr.dynamic_rule_used_task_id - INNER JOIN realtime_protection.t_protect_object_dynamic_rule_conn tpodrc + LEFT JOIN realtime_protection.t_dynamic_rule tdr on tt.task_id = tdr.dynamic_rule_used_task_id + LEFT JOIN realtime_protection.t_protect_object_dynamic_rule_conn tpodrc on tdr.dynamic_rule_id = tpodrc.dynamic_rule_id - INNER JOIN realtime_protection.t_protect_object tpo on tpo.protect_object_id = tpodrc.protect_object_id - INNER JOIN realtime_protection.t_strategy_template tst on tdr.template_id = tst.strategy_template_id + LEFT JOIN realtime_protection.t_protect_object tpo on tpo.protect_object_id = tpodrc.protect_object_id + LEFT JOIN realtime_protection.t_strategy_template tst on tdr.template_id = tst.strategy_template_id WHERE task_id = #{task_id}