Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/realtime/protection/server/rule/dynamicrule/DynamicRuleService.java
#	src/main/java/com/realtime/protection/server/rule/staticrule/StaticRuleService.java
#	src/main/java/com/realtime/protection/server/task/TaskService.java
This commit is contained in:
EnderByEndera
2024-04-29 15:36:06 +08:00
22 changed files with 295 additions and 25 deletions

View File

@@ -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;
/**
* 设置是否含有日常/应急/紧急防护等级态字段的字段
*/

View File

@@ -60,5 +60,5 @@ public class WhiteListObject {
@JsonProperty("audit_status")
@ExcelIgnore
@Schema(description = "白名单对象审核状态0为未审核1为已退回2为审核通过", example = "2")
private String whiteListAuditStatus;
private Integer whiteListAuditStatus;
}

View File

@@ -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<Integer, Integer> idsWithAuditStatusMap) {
List<Integer> errorIds = new ArrayList<>();
for (Map.Entry<Integer, Integer> 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));
}
*/
}

View File

@@ -42,4 +42,8 @@ public interface TemplateMapper {
Integer queryUsedTemplateTotalNum();
Integer queryAuditTemplateTotalNum(Integer auditState);
Integer queryAuditStatusById(Integer id);
Boolean updateAuditStatusById(Integer id, Integer auditStatus);
}

View File

@@ -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<String, Object> 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<String, Object> resultMap = new HashMap<>();
resultMap.put("success", success);
resultMap.put("audit_status", auditStatus);
return resultMap;
}
/*
public Map<String, Object> 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<String, Object> resultMap = new HashMap<>();
resultMap.put("success", success);
resultMap.put("audit_status", auditStatus);
return resultMap;
}
public Object updateAuditStatusBatch(Map<Integer, Integer> idsWithAuditStatusMap) {
Function<DynamicRuleMapper, Function<Map<Integer, Integer>, Boolean>> updateDynamicRuleAuditStatusFunction =
mapper -> map -> {
if (map == null || map.isEmpty()) {
return false;
}
Map<Integer, Integer> idWithAuditStatusBatch = new HashMap<>();
for (Map.Entry<Integer, Integer> 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);
}
*/
}

View File

@@ -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()

View File

@@ -58,4 +58,6 @@ public interface DynamicRuleMapper {
Boolean updateAuditStatusById(Integer dynamicRuleId, Integer auditStatus);
void updateAuditStatusByIdBatch(@Param("idWithAuditStatusBatch") Map<Integer, Integer> idWithAuditStatusBatch);
List<Integer> queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map<Integer, Integer> idsWithAuditStatusMap);
}

View File

@@ -12,6 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -227,6 +228,27 @@ public class DynamicRuleService {
}
public Object updateAuditStatusBatch(Map<Integer, Integer> idsWithAuditStatusMap) {
//校验id和status是否合法
List<Integer> originalAuditStatusList = dynamicRuleMapper.queryAuditStatusByIds(idsWithAuditStatusMap);
int index = 0;
List<Integer> errorIds = new ArrayList<>();
for(Map.Entry<Integer, Integer> 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<DynamicRuleMapper, Function<Map<Integer, Integer>, Boolean>> updateDynamicRuleAuditStatusFunction =
mapper -> map -> {
if (map == null || map.isEmpty()) {

View File

@@ -50,4 +50,6 @@ public interface StaticRuleMapper {
Integer queryUsedStaticRuleTotalNum();
Integer queryAuditStaticRuleTotalNum(@Param("auditStatus")Integer auditStatus);
List<Integer> queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map<Integer, Integer> idsWithAuditStatusMap);
}

View File

@@ -3,10 +3,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.utils.Counter;
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;
@@ -20,6 +22,7 @@ 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
@@ -28,11 +31,14 @@ public class StaticRuleService {
private final StaticRuleMapper staticRuleMapper;
private final SqlSessionWrapper sqlSessionWrapper;
private final Counter counter;
private final WhiteListService whiteListService;
public StaticRuleService(StaticRuleMapper staticRuleMapper, SqlSessionWrapper sqlSessionWrapper, WhiteListService whiteListService, Counter counter) {
public StaticRuleService(StaticRuleMapper staticRuleMapper, SqlSessionWrapper sqlSessionWrapper, Counter counter) {
this.staticRuleMapper = staticRuleMapper;
this.sqlSessionWrapper = sqlSessionWrapper;
this.counter = counter;
this.whiteListService = whiteListService;
}
private static int ipToInt(String ip) {
@@ -80,6 +86,14 @@ public class StaticRuleService {
+ String.format("%06d", counter.generateId("static_rule"))
);
List<StaticRuleObject> staticRuleObjects = new ArrayList<>();
staticRuleObjects.add(object);
List<WhiteListObject> 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();
@@ -133,6 +147,15 @@ public class StaticRuleService {
throw new IllegalArgumentException("静态规则不符合指定的配置方法,请参考规则模板以配置静态规则");
}
List<StaticRuleObject> staticRuleObjects = new ArrayList<>();
staticRuleObjects.add(object);
List<WhiteListObject> 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());
@@ -234,6 +257,25 @@ public class StaticRuleService {
}
public Object updateAuditStatusBatch(Map<Integer, Integer> idsWithAuditStatusMap) {
//校验id和status是否合法
List<Integer> originalAuditStatusList = staticRuleMapper.queryAuditStatusByIds(idsWithAuditStatusMap);
int index = 0;
List<Integer> errorIds = new ArrayList<>();
for(Map.Entry<Integer, Integer> 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<StaticRuleMapper, Function<Map<Integer, Integer>, Boolean>> updateStaticRuleAuditStatusFunction =
mapper -> map -> {

View File

@@ -69,4 +69,6 @@ public interface TaskMapper {
void updateAuditStatusByIdBatch(@Param("idWithAuditStatusBatch") Map<Integer, Integer> idWithAuditStatusBatch);
Integer queryAuditTaskTotalNum(Integer auditState);
List<Integer> queryAuditStatusByIds(@Param("idWithAuditStatusBatch") Map<Integer, Integer> idsWithAuditStatusMap);
}

View File

@@ -27,6 +27,7 @@ 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;
@@ -339,6 +340,26 @@ public class TaskService {
}
public Object updateAuditStatusBatch(Map<Integer, Integer> idsWithAuditStatusMap) {
//校验id和status是否合法
List<Integer> originalAuditStatusList = taskMapper.queryAuditStatusByIds(idsWithAuditStatusMap);
int index = 0;
List<Integer> errorIds = new ArrayList<>();
for(Map.Entry<Integer, Integer> 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<TaskMapper, Function<Map<Integer, Integer>, Boolean>> updateTaskAuditStatusFunction =
mapper -> map -> {
if (map == null || map.isEmpty()) {

View File

@@ -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);
}
@@ -157,6 +157,12 @@ public class WhiteListService {
List<StaticRuleObject> staticRuleObjects = staticRuleMapper.queryStaticRuleByIds(staticRuleId);
return whiteListMapper.whiteListCStaticRulesCheck(staticRuleObjects);
}
public List<WhiteListObject> whiteListStaticRulesObjectCheck(List<StaticRuleObject> staticRuleObjects) {
//参数应该是指令,不管动态静态
// 命中的whitelist列表每一列包含ip port url
return whiteListMapper.whiteListCStaticRulesCheck(staticRuleObjects);
}
@Transactional