1、AlertMessage类移动位置

2、动态规则增加删除判断,如果使用任务处于运行、暂停,不允许删除动态规则。(静态规则不需要删除判断,因为指令已经下发。但动态规则配置不能删除,告警信息过来会找不到动态规则)
This commit is contained in:
Hao Miao
2024-01-25 17:29:54 +08:00
parent 0864644918
commit e9313f2420
11 changed files with 80 additions and 16 deletions

View File

@@ -1,11 +1,13 @@
package com.realtime.protection.configuration.entity.rule.dynamicrule; package com.realtime.protection.configuration.entity.alert;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.realtime.protection.configuration.entity.task.FiveTupleWithMask; import com.realtime.protection.configuration.entity.task.FiveTupleWithMask;
import com.realtime.protection.configuration.kafka.KafkaMessage;
import lombok.Data; import lombok.Data;
@Data @Data
public class AlertMessage { public class AlertMessage implements KafkaMessage {
@JsonProperty("task_id") @JsonProperty("task_id")
private Long taskId; private Long taskId;
@@ -31,4 +33,3 @@ public class AlertMessage {
private String alertMessageUUID; private String alertMessageUUID;
} }

View File

@@ -58,7 +58,7 @@ public class DynamicRuleObject {
private Integer dynamicRuleCreateUserId; private Integer dynamicRuleCreateUserId;
@JsonProperty("dynamic_rule_used_task_id") @JsonProperty("dynamic_rule_used_task_id")
@Schema(description = "使用该动态规则的任务ID", accessMode = Schema.AccessMode.READ_ONLY) @Schema(description = "使用该动态规则的任务ID", accessMode = Schema.AccessMode.READ_ONLY)
private Integer dynamicRuleUsedTaskId; private Long dynamicRuleUsedTaskId;
//前端不发送事件类型和来源系统了而是根据事件类型和来源系统确定策略模板id发过来template_id //前端不发送事件类型和来源系统了而是根据事件类型和来源系统确定策略模板id发过来template_id
@JsonProperty("dynamic_rule_source_system") @JsonProperty("dynamic_rule_source_system")

View File

@@ -1,6 +1,6 @@
package com.realtime.protection.server.alertmessage; package com.realtime.protection.server.alertmessage;
import com.realtime.protection.configuration.entity.rule.dynamicrule.AlertMessage; import com.realtime.protection.configuration.entity.alert.AlertMessage;
import com.realtime.protection.configuration.response.ResponseResult; import com.realtime.protection.configuration.response.ResponseResult;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -2,7 +2,7 @@ package com.realtime.protection.server.alertmessage;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.realtime.protection.configuration.entity.defense.template.ProtectLevel; import com.realtime.protection.configuration.entity.defense.template.ProtectLevel;
import com.realtime.protection.configuration.entity.rule.dynamicrule.AlertMessage; import com.realtime.protection.configuration.entity.alert.AlertMessage;
import com.realtime.protection.configuration.entity.task.TaskCommandInfo; import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;

View File

@@ -2,7 +2,7 @@ package com.realtime.protection.server.alertmessage;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.realtime.protection.configuration.entity.defense.template.ProtectLevel; import com.realtime.protection.configuration.entity.defense.template.ProtectLevel;
import com.realtime.protection.configuration.entity.rule.dynamicrule.AlertMessage; import com.realtime.protection.configuration.entity.alert.AlertMessage;
import com.realtime.protection.configuration.entity.task.FiveTupleWithMask; import com.realtime.protection.configuration.entity.task.FiveTupleWithMask;
import com.realtime.protection.configuration.entity.task.TaskCommandInfo; import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
import com.realtime.protection.configuration.utils.enums.StateEnum; import com.realtime.protection.configuration.utils.enums.StateEnum;

View File

@@ -45,4 +45,6 @@ public interface DynamicRuleMapper {
String sourceSystem, String creator); String sourceSystem, String creator);
List<DynamicRuleObject> queryDynamicRuleByIds(List<Integer> ids); List<DynamicRuleObject> queryDynamicRuleByIds(List<Integer> ids);
Integer queryTaskStatusBydynamicRuleId(Integer dynamicRuleId);
} }

View File

@@ -4,6 +4,7 @@ import com.alibaba.excel.util.ListUtils;
import com.realtime.protection.configuration.entity.defense.template.Template; import com.realtime.protection.configuration.entity.defense.template.Template;
import com.realtime.protection.configuration.entity.rule.dynamicrule.DynamicRuleObject; import com.realtime.protection.configuration.entity.rule.dynamicrule.DynamicRuleObject;
import com.realtime.protection.configuration.utils.SqlSessionWrapper; import com.realtime.protection.configuration.utils.SqlSessionWrapper;
import com.realtime.protection.configuration.utils.enums.StateEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -72,8 +73,17 @@ public class DynamicRuleService {
public void deleteDynamicRuleObject(Integer dynamicRuleId) { public void deleteDynamicRuleObject(Integer dynamicRuleId) {
//不需要使用 join //根据任务状态判断能否删除
//在数据库中设置了级联删除 ON DELETE CASCADE在删除在从父表中删除数据时自动删除子表中的数据 Integer taskStatus = dynamicRuleMapper.queryTaskStatusBydynamicRuleId(dynamicRuleId);
switch (StateEnum.getStateEnumByNum(taskStatus)){
case RUNNING:
throw new IllegalArgumentException("使用该动态规则的任务处于运行状态");
case PAUSED:
throw new IllegalArgumentException("使用该动态规则的任务处于暂停状态");
default:
break;
}
//不需要使用 join,在数据库中设置了级联删除 ON DELETE CASCADE在删除在从父表中删除数据时自动删除子表中的数据
dynamicRuleMapper.deleteDynamicRuleObject(dynamicRuleId); dynamicRuleMapper.deleteDynamicRuleObject(dynamicRuleId);
} }

View File

@@ -34,7 +34,7 @@
<result column="has_dns" property="hasDNS"/> <result column="has_dns" property="hasDNS"/>
</resultMap> </resultMap>
<resultMap id="alertMessageMap" type="com.realtime.protection.configuration.entity.rule.dynamicrule.AlertMessage"> <resultMap id="alertMessageMap" type="com.realtime.protection.configuration.entity.alert.AlertMessage">
<id column="ALERT_MESSAGE_ID" property="alertMessageUUID"/> <id column="ALERT_MESSAGE_ID" property="alertMessageUUID"/>
<result column="TASK_ID" property="taskId"/> <result column="TASK_ID" property="taskId"/>
<result column="DYNAMIC_RULE_ID" property="dynamicRuleId"/> <result column="DYNAMIC_RULE_ID" property="dynamicRuleId"/>

View File

@@ -237,5 +237,13 @@
</select> </select>
<select id="queryTaskStatusBydynamicRuleId" resultType="java.lang.Integer">
select t_task.task_status
from t_dynamic_rule
left join realtime_protection.t_task
on t_task.task_id = t_dynamic_rule.dynamic_rule_used_task_id
where dynamic_rule_id = #{dynamicRuleId}
</select>
</mapper> </mapper>

View File

@@ -1,8 +1,5 @@
package com.realtime.protection.server.alertmessage; package com.realtime.protection.server.alertmessage;
import com.github.xiaoymin.knife4j.annotations.Ignore;
import com.realtime.protection.configuration.entity.rule.dynamicrule.AlertMessage;
import com.realtime.protection.configuration.entity.task.FiveTupleWithMask;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;

View File

@@ -1,21 +1,36 @@
package com.realtime.protection.server.rule.dynamic; package com.realtime.protection.server.rule.dynamic;
import com.github.xiaoymin.knife4j.annotations.Ignore;
import com.realtime.protection.ProtectionApplicationTests; import com.realtime.protection.ProtectionApplicationTests;
import com.realtime.protection.configuration.entity.defense.object.ProtectObject;
import com.realtime.protection.configuration.entity.defense.template.Template;
import com.realtime.protection.configuration.entity.rule.dynamicrule.DynamicRuleObject; import com.realtime.protection.configuration.entity.rule.dynamicrule.DynamicRuleObject;
import com.realtime.protection.configuration.entity.task.Task;
import com.realtime.protection.server.defense.object.ProtectObjectService;
import com.realtime.protection.server.defense.template.TemplateService;
import com.realtime.protection.server.rule.dynamicrule.DynamicRuleService; import com.realtime.protection.server.rule.dynamicrule.DynamicRuleService;
import com.realtime.protection.server.task.TaskService;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@SpringBootTest @SpringBootTest
public class DynamicRuleServiceTest extends ProtectionApplicationTests { public class DynamicRuleServiceTest extends ProtectionApplicationTests {
private final DynamicRuleService dynamicRuleService; private final DynamicRuleService dynamicRuleService;
private final TaskService taskService;
private final ProtectObjectService protectObjectService;
private final TemplateService templateService;
@Autowired @Autowired
public DynamicRuleServiceTest(DynamicRuleService dynamicRuleService) { public DynamicRuleServiceTest(DynamicRuleService dynamicRuleService,TaskService taskService,
ProtectObjectService protectObjectService,TemplateService templateService) {
this.dynamicRuleService = dynamicRuleService; this.dynamicRuleService = dynamicRuleService;
this.taskService = taskService;
this.protectObjectService = protectObjectService;
this.templateService = templateService;
} }
@Test @Test
@@ -36,7 +51,38 @@ public class DynamicRuleServiceTest extends ProtectionApplicationTests {
@Test @Test
void testDeleteDynamicRule() { void testDeleteDynamicRule() {
// dynamicRuleService.deleteDynamicRuleObject(8); List<ProtectObject> protectObject = protectObjectService.queryProtectObjects(null, null, 1, 1);
List<Template> templates = templateService.queryTemplates(null, 1, 1);
DynamicRuleObject object = new DynamicRuleObject();
object.setDynamicRuleName("UpdateDynamicRule2");
object.setDynamicRuleFrequency(1);
object.setDynamicRulePriority(1);
object.setDynamicRuleRange("北京");
object.setDynamicRuleProtectLevel(2);
object.setTemplateId(templates.get(0).getTemplateId());
object.setProtectObjectIds(List.of(new Integer[]{protectObject.get(0).getProtectObjectId()}));
Integer dynamicRuleId = dynamicRuleService.newDynamicRuleObject(object);
Task task = new Task();
task.setTaskName("dong态测试");
LocalDateTime taskStartTime = LocalDateTime.now().plusMinutes(1);
LocalDateTime taskEndTime = LocalDateTime.now().plusYears(5);
task.setTaskStartTime(taskStartTime);
task.setTaskEndTime(taskEndTime);
task.setTaskAct("阻断");
task.setTaskType(1);
task.setTaskCreateUserId(1);
task.setTaskCreateUsername("xxx");
task.setTaskCreateDepart("xxx");
task.setDynamicRuleIds(List.of(new Integer[]{dynamicRuleId}));
Long taskId = taskService.newTask(task);
taskService.changeTaskStatus(taskId, 2);
// dynamicRuleService.deleteDynamicRuleObject(dynamicRuleId);
} }
@Test @Test