1. 新增数据源oracle,已在application.yml中配置
2. 新增任务状态类,未来将在切换任务状态中使用 3. 新增ProtectLevel实体类,用来存储Template对应的三种防护等级数据 4. Task实体类中删除protectObjectIds,因为MySQL表结构发生修改 5. TaskController新增audit和delete路由,用以审核和删除Task 6. TemplateMapper新增newProtectLevel方法 7.
This commit is contained in:
@@ -27,9 +27,11 @@ dependencies {
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
||||
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
developmentOnly 'org.springframework.boot:spring-boot-devtools'
|
||||
runtimeOnly 'com.mysql:mysql-connector-j'
|
||||
runtimeOnly 'com.oracle.database.jdbc:ojdbc8:19.7.0.0'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
|
||||
@@ -39,6 +41,7 @@ dependencies {
|
||||
implementation 'cn.dev33:sa-token-spring-boot3-starter:1.37.0'
|
||||
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
|
||||
implementation 'com.alibaba:easyexcel:3.3.3'
|
||||
implementation 'com.baomidou:dynamic-datasource-spring-boot3-starter:4.3.0'
|
||||
}
|
||||
|
||||
tasks.named('test') {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.realtime.protection;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.realtime.protection.configuration.entity.defense.template;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProtectLevel {
|
||||
private Integer protectLevelId;
|
||||
|
||||
private Boolean hasProtectObjectIP = false;
|
||||
|
||||
private Boolean hasProtectObjectPort = false;
|
||||
|
||||
private Boolean hasPeerIP = false;
|
||||
|
||||
private Boolean hasPeerPort = false;
|
||||
|
||||
private Boolean hasProtocol = false;
|
||||
|
||||
private Boolean hasURL = false;
|
||||
|
||||
private Boolean hasDNS = false;
|
||||
}
|
||||
@@ -15,30 +15,31 @@ public class Template {
|
||||
@NotNull(message = "template name should not be empty.")
|
||||
private String templateName;
|
||||
|
||||
@JsonProperty("template_elements")
|
||||
private List<String> templateElements;
|
||||
|
||||
@JsonProperty("default_op")
|
||||
@NotNull(message = "default_op should not be empty.")
|
||||
private String defaultOp;
|
||||
|
||||
@JsonProperty("template_running_tasks")
|
||||
private Integer templateRunningTasks;
|
||||
|
||||
@JsonProperty("template_used")
|
||||
private Integer templateUsedTimes;
|
||||
|
||||
private Boolean hasProtectObjectIP;
|
||||
@JsonProperty("source_system")
|
||||
@NotNull(message = "source_system should not be empty. ")
|
||||
private String sourceSystem;
|
||||
|
||||
private Boolean hasProtectObjectPort;
|
||||
@JsonProperty("protect_level_low")
|
||||
@NotNull(message = "protect_level_low should not be empty. ")
|
||||
private ProtectLevel protectLevelLow;
|
||||
|
||||
private Boolean hasPeerIP;
|
||||
@JsonProperty("protect_level_medium")
|
||||
@NotNull(message = "protect_level_medium should not be empty. ")
|
||||
private ProtectLevel protectLevelMedium;
|
||||
|
||||
private Boolean hasPeerPort;
|
||||
@JsonProperty("protect_level_high")
|
||||
@NotNull(message = "protect_level_high should not be empty. ")
|
||||
private ProtectLevel protectLevelHigh;
|
||||
|
||||
private Boolean hasProtocol;
|
||||
private Integer createUserId;
|
||||
|
||||
private Boolean hasURL;
|
||||
private String createUsername;
|
||||
|
||||
private Boolean hasDNS;
|
||||
private String createDepart;
|
||||
}
|
||||
|
||||
@@ -55,9 +55,6 @@ public class Task {
|
||||
@JsonProperty("dynamic_rule_ids")
|
||||
private List<Integer> dynamicRuleIds;
|
||||
|
||||
@JsonProperty("protect_object_ids")
|
||||
private List<Integer> protectObjectIds;
|
||||
|
||||
@JsonProperty("task_status")
|
||||
private Integer taskStatus;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.realtime.protection.configuration.utils;
|
||||
package com.realtime.protection.configuration.utils.status;
|
||||
|
||||
public class AuditStatusValidator {
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.realtime.protection.configuration.utils.status;
|
||||
|
||||
import com.realtime.protection.configuration.utils.status.state.State;
|
||||
|
||||
public class StatusChanger {
|
||||
|
||||
private final State state;
|
||||
|
||||
public StatusChanger(State state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public static StatusChanger setOriginal(State original) {
|
||||
return new StatusChanger(original);
|
||||
}
|
||||
|
||||
public Boolean changeState(State newState) {
|
||||
return this.state.handle(newState);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.realtime.protection.configuration.utils.status.state;
|
||||
|
||||
public class PauseState implements State {
|
||||
@Override
|
||||
public Boolean handle(State newState) {
|
||||
if (!(newState instanceof RunningState)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return handleRun();
|
||||
}
|
||||
|
||||
private Boolean handleRun() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.realtime.protection.configuration.utils.status.state;
|
||||
|
||||
public class RunningState implements State {
|
||||
@Override
|
||||
public Boolean handle(State newState) {
|
||||
if (newState instanceof RunningState) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newState instanceof PauseState) {
|
||||
return handlePause();
|
||||
}
|
||||
|
||||
if (newState instanceof StopState) {
|
||||
return handleStop();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Boolean handlePause() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private Boolean handleStop() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.realtime.protection.configuration.utils.status.state;
|
||||
|
||||
public interface State {
|
||||
|
||||
Boolean handle(State newState);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.realtime.protection.configuration.utils.status.state;
|
||||
|
||||
public class StopState implements State {
|
||||
|
||||
@Override
|
||||
public Boolean handle(State newState) {
|
||||
if (!(newState instanceof RunningState)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return handleRun();
|
||||
}
|
||||
|
||||
public Boolean handleRun() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,9 @@ public class ProtectObjectController {
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
public ResponseResult uploadFile(MultipartFile uploadFile) throws IOException {
|
||||
public ResponseResult uploadFile(
|
||||
@NotNull(message = "uploadFile cannot be null") MultipartFile uploadFile
|
||||
) throws IOException {
|
||||
EasyExcel.read(uploadFile.getInputStream(), ProtectObject.class,
|
||||
new ProjectObjectDataListener(protectObjectService)).sheet().doRead();
|
||||
return ResponseResult.ok();
|
||||
@@ -52,11 +54,12 @@ public class ProtectObjectController {
|
||||
public void downloadTemplate(HttpServletResponse response) throws IOException {
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
String fileName = URLEncoder.encode("防护对象", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
String fileName = URLEncoder.encode("防护对象上传模板", StandardCharsets.UTF_8)
|
||||
.replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
|
||||
EasyExcel.write(response.getOutputStream(), ProtectObject.class)
|
||||
.sheet("防护对象")
|
||||
.sheet("防护对象上传模板")
|
||||
.doWrite(List.of());
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@ package com.realtime.protection.server.defense.object;
|
||||
|
||||
import com.alibaba.excel.util.ListUtils;
|
||||
import com.realtime.protection.configuration.entity.defense.object.ProtectObject;
|
||||
import com.realtime.protection.configuration.utils.AuditStatusValidator;
|
||||
import com.realtime.protection.configuration.utils.status.AuditStatusValidator;
|
||||
import com.realtime.protection.configuration.utils.SqlSessionWrapper;
|
||||
import org.apache.ibatis.exceptions.PersistenceException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -12,12 +11,12 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ProtectObjectService {
|
||||
private final ProtectObjectMapper protectObjectMapper;
|
||||
private final SqlSessionWrapper sqlSessionWrapper;
|
||||
private static final Integer batchSize = 100;
|
||||
|
||||
public ProtectObjectService(ProtectObjectMapper protectObjectMapper, SqlSessionWrapper sqlSessionWrapper) {
|
||||
this.protectObjectMapper = protectObjectMapper;
|
||||
@@ -39,10 +38,10 @@ public class ProtectObjectService {
|
||||
return false;
|
||||
}
|
||||
|
||||
List<ProtectObject> protectObjectBatch = ListUtils.newArrayListWithExpectedSize(100);
|
||||
List<ProtectObject> protectObjectBatch = ListUtils.newArrayListWithExpectedSize(batchSize);
|
||||
for (ProtectObject protectObject : protectObjectList) {
|
||||
protectObjectBatch.add(protectObject);
|
||||
if (protectObjectBatch.size() < 100) {
|
||||
if (protectObjectBatch.size() < batchSize) {
|
||||
continue;
|
||||
}
|
||||
mapper.newProtectObjects(protectObjectBatch);
|
||||
@@ -81,10 +80,10 @@ public class ProtectObjectService {
|
||||
boolean success = true;
|
||||
Integer result;
|
||||
|
||||
List<Integer> protectObjectBatch = ListUtils.newArrayListWithExpectedSize(100);
|
||||
List<Integer> protectObjectBatch = ListUtils.newArrayListWithExpectedSize(batchSize);
|
||||
for (Integer protectObjectId : list) {
|
||||
protectObjectBatch.add(protectObjectId);
|
||||
if (protectObjectBatch.size() < 100) {
|
||||
if (protectObjectBatch.size() < batchSize) {
|
||||
continue;
|
||||
}
|
||||
mapper.deleteProtectObjects(protectObjectBatch);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.realtime.protection.server.defense.template;
|
||||
|
||||
import com.realtime.protection.configuration.entity.defense.template.ProtectLevel;
|
||||
import com.realtime.protection.configuration.entity.defense.template.Template;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -10,10 +11,14 @@ import java.util.List;
|
||||
public interface TemplateMapper {
|
||||
void newTemplate(@Param("template") Template template);
|
||||
|
||||
void newProtectLevel(@Param("level") ProtectLevel protectLevel);
|
||||
|
||||
List<Template> queryTemplates(@Param("template_name") String templateName,
|
||||
@Param("page") Integer page,
|
||||
@Param("page_size") Integer pageSize);
|
||||
|
||||
ProtectLevel queryProtectLevel(@Param("level_id") Integer protectLevelId);
|
||||
|
||||
Boolean updateTemplateInformation(@Param("template") Template template);
|
||||
|
||||
void countTemplateRunningTasks(@Param("template_id") Integer templateId);
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.realtime.protection.server.defense.template;
|
||||
|
||||
import com.realtime.protection.configuration.entity.defense.template.Template;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.beans.Transient;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -11,18 +13,15 @@ public class TemplateService {
|
||||
|
||||
private final TemplateMapper templateMapper;
|
||||
|
||||
private final String[] permittedOps = new String[]{"阻断", "清洗", "篡改", "反制"};
|
||||
|
||||
public TemplateService(TemplateMapper templateMapper) {
|
||||
this.templateMapper = templateMapper;
|
||||
}
|
||||
|
||||
public Integer newTemplate(Template template) throws IllegalArgumentException {
|
||||
if (!Arrays.asList(permittedOps).contains(template.getDefaultOp())) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
setTemplateElements(template);
|
||||
@Transactional
|
||||
public Integer newTemplate(Template template) {
|
||||
templateMapper.newProtectLevel(template.getProtectLevelLow());
|
||||
templateMapper.newProtectLevel(template.getProtectLevelMedium());
|
||||
templateMapper.newProtectLevel(template.getProtectLevelHigh());
|
||||
|
||||
templateMapper.newTemplate(template);
|
||||
|
||||
@@ -37,28 +36,11 @@ public class TemplateService {
|
||||
}
|
||||
|
||||
public Boolean updateTemplate(Integer templateId, Template template) {
|
||||
setTemplateElements(template);
|
||||
template.setTemplateId(templateId);
|
||||
|
||||
return templateMapper.updateTemplateInformation(template);
|
||||
}
|
||||
|
||||
private void setTemplateElements(Template template) {
|
||||
for (String choice : template.getTemplateElements()) {
|
||||
switch (choice) {
|
||||
case "防护对象IP" -> template.setHasProtectObjectIP(true);
|
||||
case "防护对象端口" -> template.setHasProtectObjectPort(true);
|
||||
case "对端IP" -> template.setHasPeerIP(true);
|
||||
case "对端端口" -> template.setHasPeerPort(true);
|
||||
case "协议" -> template.setHasProtocol(true);
|
||||
case "URL" -> template.setHasURL(true);
|
||||
case "DNS" -> template.setHasDNS(true);
|
||||
|
||||
default -> throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean addTemplateUsedTimes(Integer templateId, Integer addTimes) {
|
||||
return templateMapper.addTemplateUsedTimes(templateId, addTimes);
|
||||
}
|
||||
|
||||
@@ -65,17 +65,28 @@ public class TaskController {
|
||||
.setData("task_start_time", task.getTaskStartTime())
|
||||
.setData("task_end_time", task.getTaskEndTime())
|
||||
.setData("task_static_rule_ids", task.getStaticRuleIds())
|
||||
.setData("task_dynamic_rule_ids", task.getDynamicRuleIds())
|
||||
.setData("task_protect_object_ids", task.getProtectObjectIds());
|
||||
.setData("task_dynamic_rule_ids", task.getDynamicRuleIds());
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/update")
|
||||
public ResponseResult updateTask(@PathVariable("id") @Min(1) Integer taskId, @RequestBody @Valid Task task) {
|
||||
task.setTaskId(taskId);
|
||||
taskService.updateTask(task);
|
||||
|
||||
return ResponseResult.ok()
|
||||
.setData("task_id", taskId)
|
||||
.setData("success", true);
|
||||
.setData("success", taskService.updateTask(task));
|
||||
}
|
||||
|
||||
@GetMapping("/{taskId}/{auditStatus}/audit")
|
||||
public ResponseResult changeTaskAuditStatus(@PathVariable Integer auditStatus, @PathVariable Integer taskId) {
|
||||
return ResponseResult.ok()
|
||||
.setData("task_id", taskId)
|
||||
.setData("success", taskService.changeTaskAuditStatus(taskId, auditStatus));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}/delete")
|
||||
public ResponseResult deleteTask(@PathVariable("id") Integer taskId) {
|
||||
return ResponseResult.ok()
|
||||
.setData("task_id", taskId)
|
||||
.setData("success", taskService.deleteTask(taskId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,6 @@ import java.util.List;
|
||||
public interface TaskMapper {
|
||||
void newTask(@Param("task") Task task);
|
||||
|
||||
void newTaskProtectObjectConcat(@Param("task_id") Integer taskId, @Param("proobj_id") Integer proobjId);
|
||||
|
||||
void newTaskStaticRuleConcat(@Param("task_id") Integer taskId,
|
||||
@Param("rule_ids") List<Integer> staticRuleIds);
|
||||
|
||||
@@ -24,17 +22,13 @@ public interface TaskMapper {
|
||||
|
||||
Task queryTask(@Param("task_id") Integer taskId);
|
||||
|
||||
List<Integer> queryTaskConcatProtectObjectIds(@Param("task_id") Integer taskId);
|
||||
|
||||
List<Integer> queryTaskConcatStaticRuleIds(@Param("task_id") Integer taskId);
|
||||
|
||||
List<Integer> queryTaskConcatDynamicRuleIds(@Param("task_id") Integer taskId);
|
||||
|
||||
void updateTask(@Param("task") Task task);
|
||||
|
||||
void clearTaskProtectObjectConcat(@Param("task_id") Integer taskId);
|
||||
|
||||
void clearTaskConnectedStaticRule(@Param("task_id") Integer taskId);
|
||||
|
||||
void clearTaskConnectedDynamicRule(@Param("task_id") Integer taskId);
|
||||
|
||||
void changeTaskAuditStatus(@Param("task_id") Integer taskId, @Param("audit_status") Integer auditStatus);
|
||||
|
||||
Boolean deleteTask(@Param("task_id") Integer taskId);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.realtime.protection.server.task;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.realtime.protection.configuration.entity.task.Task;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import com.realtime.protection.configuration.utils.status.AuditStatusValidator;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -10,38 +10,19 @@ import java.util.List;
|
||||
|
||||
@Service
|
||||
public class TaskService {
|
||||
|
||||
private final SqlSessionFactory sqlSessionFactory;
|
||||
private final TaskMapper taskMapper;
|
||||
|
||||
public TaskService(SqlSessionFactory sqlSessionFactory, TaskMapper taskMapper) {
|
||||
this.sqlSessionFactory = sqlSessionFactory;
|
||||
public TaskService(TaskMapper taskMapper) {
|
||||
this.taskMapper = taskMapper;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Integer newTask(Task task) {
|
||||
SqlSession session = sqlSessionFactory.openSession(false);
|
||||
TaskMapper taskMapper = session.getMapper(TaskMapper.class);
|
||||
try {
|
||||
taskMapper.newTask(task);
|
||||
|
||||
task.getProtectObjectIds().forEach(
|
||||
proobjId -> taskMapper.newTaskProtectObjectConcat(task.getTaskId(), proobjId));
|
||||
|
||||
taskMapper.newTaskStaticRuleConcat(task.getTaskId(), task.getStaticRuleIds());
|
||||
// taskMapper.newTaskDynamicRuleConcat(task.getTaskId(), task.getDynamicRuleIds());
|
||||
taskMapper.newTaskDynamicRuleConcat(task.getTaskId(), task.getDynamicRuleIds());
|
||||
|
||||
session.commit();
|
||||
} catch (Exception e) {
|
||||
session.rollback();
|
||||
throw e;
|
||||
} finally {
|
||||
session.close();
|
||||
}
|
||||
|
||||
if (task.getTaskId() == null) {
|
||||
return 0;
|
||||
}
|
||||
return task.getTaskId();
|
||||
}
|
||||
|
||||
@@ -52,41 +33,32 @@ public class TaskService {
|
||||
}
|
||||
|
||||
public Task queryTask(Integer id) {
|
||||
SqlSession session = sqlSessionFactory.openSession(false);
|
||||
TaskMapper taskMapper = session.getMapper(TaskMapper.class);
|
||||
Task task;
|
||||
|
||||
try {
|
||||
task = taskMapper.queryTask(id);
|
||||
if (task == null) {
|
||||
return null;
|
||||
}
|
||||
task.setProtectObjectIds(taskMapper.queryTaskConcatProtectObjectIds(task.getTaskId()));
|
||||
// task.setDynamicRuleIds(taskMapper.queryTaskConcatDynamicRuleIds(task.getTaskId()));
|
||||
task.setStaticRuleIds(taskMapper.queryTaskConcatStaticRuleIds(task.getTaskId()));
|
||||
|
||||
session.commit();
|
||||
} catch (Exception e) {
|
||||
session.rollback();
|
||||
throw e;
|
||||
} finally {
|
||||
session.close();
|
||||
}
|
||||
|
||||
return task;
|
||||
return taskMapper.queryTask(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updateTask(Task task) {
|
||||
public Boolean updateTask(Task task) {
|
||||
taskMapper.updateTask(task);
|
||||
|
||||
taskMapper.clearTaskProtectObjectConcat(task.getTaskId());
|
||||
taskMapper.clearTaskConnectedStaticRule(task.getTaskId());
|
||||
// taskMapper.clearTaskConnectedDynamicRule(task.getTaskId());
|
||||
taskMapper.clearTaskConnectedDynamicRule(task.getTaskId());
|
||||
|
||||
task.getProtectObjectIds().forEach(
|
||||
proobjId -> taskMapper.newTaskProtectObjectConcat(task.getTaskId(), proobjId));
|
||||
taskMapper.newTaskStaticRuleConcat(task.getTaskId(), task.getStaticRuleIds());
|
||||
// taskMapper.newTaskDynamicRuleConcat(task.getTaskId(), task.getDynamicRuleIds());
|
||||
taskMapper.newTaskDynamicRuleConcat(task.getTaskId(), task.getDynamicRuleIds());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Boolean changeTaskAuditStatus(Integer taskId, Integer taskAuditStatus) {
|
||||
if (AuditStatusValidator.setOriginal(taskMapper.queryTask(taskId).getTaskAuditStatus()).checkValidate(taskAuditStatus))
|
||||
taskMapper.changeTaskAuditStatus(taskId, taskAuditStatus);
|
||||
else return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Boolean deleteTask(Integer taskId) {
|
||||
return taskMapper.deleteTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
// just for example, not for production environment
|
||||
public interface LoginMapper {
|
||||
Integer login(@Param("username") String username, @Param("password") String password);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.realtime.protection.server.whitelist;
|
||||
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.AuditStatusValidator;
|
||||
import com.realtime.protection.configuration.utils.status.AuditStatusValidator;
|
||||
import com.realtime.protection.configuration.utils.SqlSessionWrapper;
|
||||
import com.realtime.protection.server.rule.staticrule.StaticRuleMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -3,12 +3,27 @@ server:
|
||||
|
||||
spring:
|
||||
datasource:
|
||||
dynamic:
|
||||
datasource:
|
||||
mysql:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
username: root
|
||||
password: aiihhbfcsy123!@#
|
||||
url: jdbc:mysql://localhost:3306/realtime_protection
|
||||
url: jdbc:mysql://192.168.107.89:3306/realtime_protection
|
||||
hikari:
|
||||
auto-commit: false
|
||||
is-auto-commit: false
|
||||
oracle:
|
||||
driver-class-name: oracle.jdbc.driver.OracleDriver
|
||||
username: z2_509pz
|
||||
password: 123
|
||||
url: jdbc:oracle:thin:@//10.26.22.45:1521/ORCL
|
||||
hikari:
|
||||
is-auto-commit: false
|
||||
aop:
|
||||
enabled: true
|
||||
primary: mysql
|
||||
strict: true
|
||||
grace-destroy: true
|
||||
mvc:
|
||||
servlet:
|
||||
path: /api/v1
|
||||
@@ -16,4 +31,4 @@ spring:
|
||||
default-property-inclusion: non_null
|
||||
|
||||
mybatis:
|
||||
mapper-locations: classpath:mappers/*.xml
|
||||
mapper-locations: classpath:mappers/*
|
||||
@@ -71,6 +71,7 @@
|
||||
<if test="proobj.protectObjectPort">protect_object_port = #{proobj.protectObjectPort},</if>
|
||||
<if test="proobj.protectObjectURL">protect_object_url = #{proobj.protectObjectURL},</if>
|
||||
<if test="proobj.protectObjectProtocol">protect_object_protocol = #{proobj.protectObjectProtocol},</if>
|
||||
modify_time = NOW()
|
||||
</set>
|
||||
<where>
|
||||
<if test="proobj.protectObjectId != null">protect_object_id = #{proobj.protectObjectId}</if>
|
||||
|
||||
@@ -15,11 +15,6 @@
|
||||
#{task.taskCreateUserId}, #{task.taskCreateUsername}, #{task.taskCreateDepart})
|
||||
</insert>
|
||||
|
||||
<insert id="newTaskProtectObjectConcat">
|
||||
INSERT INTO t_task_project_object(task_id, protect_object_id)
|
||||
VALUES (#{task_id}, #{proobj_id})
|
||||
</insert>
|
||||
|
||||
<update id="newTaskStaticRuleConcat">
|
||||
UPDATE t_static_rule
|
||||
<set>
|
||||
@@ -56,16 +51,27 @@
|
||||
<result column="task_type" property="taskType"/>
|
||||
|
||||
<result column="task_status" property="taskStatus"/>
|
||||
<result column="task_audit_status" property="taskAuditStatus"/>
|
||||
|
||||
<result column="task_start_time" property="taskStartTime"/>
|
||||
<result column="task_end_time" property="taskEndTime"/>
|
||||
|
||||
<result column="task_create_username" property="taskCreateUsername"/>
|
||||
<result column="task_create_depart" property="taskCreateDepart"/>
|
||||
|
||||
<collection property="staticRuleIds" ofType="java.lang.Integer">
|
||||
<id column="static_rule_id"/>
|
||||
</collection>
|
||||
|
||||
<collection property="dynamicRuleIds" ofType="java.lang.Integer">
|
||||
<id column="dynamic_rule_id"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
|
||||
<select id="queryTasks" resultMap="taskMap">
|
||||
SELECT * FROM t_task
|
||||
LEFT JOIN realtime_protection.t_static_rule tsr on t_task.task_id = tsr.static_rule_used_task_id
|
||||
LEFT JOIN realtime_protection.t_dynamic_rule tdr on t_task.task_id = tdr.dynamic_rule_used_task_id
|
||||
<where>
|
||||
<if test="task_status != null">
|
||||
AND task_status = #{task_status}
|
||||
@@ -84,22 +90,11 @@
|
||||
</select>
|
||||
|
||||
<select id="queryTask" resultMap="taskMap">
|
||||
SELECT * FROM t_task
|
||||
WHERE task_id = #{task_id}
|
||||
</select>
|
||||
|
||||
<select id="queryTaskConcatProtectObjectIds" resultType="java.lang.Integer">
|
||||
SELECT protect_object_id FROM t_task_project_object
|
||||
WHERE task_id = #{task_id}
|
||||
</select>
|
||||
|
||||
<select id="queryTaskConcatDynamicRuleIds" resultType="java.lang.Integer">
|
||||
<!-- todo: will be written after fulfilling t_dynamic_rule table -->
|
||||
</select>
|
||||
|
||||
<select id="queryTaskConcatStaticRuleIds" resultType="java.lang.Integer">
|
||||
SELECT static_rule_id FROM t_static_rule
|
||||
WHERE static_rule_used_task_id = #{task_id}
|
||||
SELECT *
|
||||
FROM t_task
|
||||
LEFT JOIN realtime_protection.t_static_rule tsr on t_task.task_id = tsr.static_rule_used_task_id
|
||||
LEFT JOIN realtime_protection.t_dynamic_rule tdr on t_task.task_id = tdr.dynamic_rule_used_task_id
|
||||
WHERE t_task.task_id = #{task_id}
|
||||
</select>
|
||||
|
||||
<update id="updateTask">
|
||||
@@ -115,11 +110,6 @@
|
||||
WHERE task_id = #{task.taskId}
|
||||
</update>
|
||||
|
||||
<update id="clearTaskProtectObjectConcat">
|
||||
DELETE FROM t_task_project_object
|
||||
WHERE task_id = #{task_id}
|
||||
</update>
|
||||
|
||||
<update id="clearTaskConnectedStaticRule">
|
||||
UPDATE t_static_rule
|
||||
SET static_rule_used_task_id = null
|
||||
@@ -127,6 +117,19 @@
|
||||
</update>
|
||||
|
||||
<update id="clearTaskConnectedDynamicRule">
|
||||
<!-- todo: will be written after fulfilling t_dynamic_rule table -->
|
||||
UPDATE t_dynamic_rule
|
||||
SET dynamic_rule_used_task_id = null
|
||||
WHERE dynamic_rule_used_task_id = #{task_id}
|
||||
</update>
|
||||
|
||||
<update id="changeTaskAuditStatus">
|
||||
UPDATE t_task
|
||||
SET task_audit_status = #{audit_status}
|
||||
WHERE task_id = #{task_id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteTask">
|
||||
DELETE FROM t_task
|
||||
WHERE task_id = #{task_id}
|
||||
</delete>
|
||||
</mapper>
|
||||
@@ -4,20 +4,24 @@
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.realtime.protection.server.defense.template.TemplateMapper">
|
||||
<insert id="newTemplate" useGeneratedKeys="true" keyProperty="templateId">
|
||||
INSERT INTO t_strategy_template(strategy_template_name,
|
||||
has_protect_object_ip, has_protect_object_port,
|
||||
has_peer_ip, has_peer_port,
|
||||
INSERT INTO t_strategy_template(strategy_template_name, strategy_template_source_system,
|
||||
strategy_template_low_level_id, strategy_template_medium_level_id,
|
||||
strategy_template_high_level_id,
|
||||
strategy_template_create_user_id, strategy_template_create_username,
|
||||
strategy_template_create_depart)
|
||||
VALUE (#{template.templateName}, #{template.sourceSystem},
|
||||
#{template.protectLevelLow.protectLevelId}, #{template.protectLevelMedium.protectLevelId},
|
||||
#{template.protectLevelHigh.protectLevelId},
|
||||
#{template.createUserId}, #{template.createUsername}, #{template.createDepart})
|
||||
</insert>
|
||||
|
||||
<insert id="newProtectLevel" useGeneratedKeys="true" keyProperty="protectLevelId">
|
||||
INSERT INTO t_protect_level(has_protect_object_ip, has_protect_object_port,
|
||||
has_protocol, has_url, has_dns,
|
||||
strategy_template_create_user_id,
|
||||
strategy_template_create_username, strategy_template_create_depart,
|
||||
default_op)
|
||||
VALUE (#{template.templateName},
|
||||
#{template.hasProtectObjectIP}, #{template.hasProtectObjectPort},
|
||||
#{template.hasPeerIP}, #{template.hasPeerPort},
|
||||
#{template.hasProtocol}, #{template.hasURL}, #{template.hasDNS},
|
||||
0,
|
||||
#{template.templateName}, #{template.templateName},
|
||||
#{template.defaultOp})
|
||||
has_peer_ip, has_peer_port)
|
||||
VALUE (#{level.hasProtectObjectIP}, #{level.hasProtectObjectPort},
|
||||
#{level.hasProtocol}, #{level.hasURL}, #{level.hasDNS},
|
||||
#{level.hasPeerIP}, #{level.hasPeerPort})
|
||||
</insert>
|
||||
|
||||
<resultMap id="templateMap" type="com.realtime.protection.configuration.entity.defense.template.Template">
|
||||
@@ -25,35 +29,87 @@
|
||||
<result column="strategy_template_name" property="templateName"/>
|
||||
<result column="strategy_template_used_times" property="templateUsedTimes"/>
|
||||
<result column="strategy_template_running_tasks" property="templateRunningTasks"/>
|
||||
<result column="strategy_template_low_level_id" property="protectLevelLow.protectLevelId"/>
|
||||
<result column="strategy_template_medium_level_id" property="protectLevelMedium.protectLevelId"/>
|
||||
<result column="strategy_template_high_level_id" property="protectLevelHigh.protectLevelId"/>
|
||||
|
||||
<association property="protectLevelLow"
|
||||
javaType="com.realtime.protection.configuration.entity.defense.template.ProtectLevel">
|
||||
<id column="protect_level_id" property="protectLevelId"/>
|
||||
<result column="has_protect_object_ip" property="hasProtectObjectIP"/>
|
||||
<result column="has_protect_object_port" property="hasProtectObjectPort"/>
|
||||
<result column="has_peer_ip" property="hasPeerIP"/>
|
||||
<result column="has_peer_port" property="hasPeerPort"/>
|
||||
<result column="has_protocol" property="hasProtocol"/>
|
||||
<result column="has_url" property="hasURL"/>
|
||||
<result column="has_dns" property="hasDNS"/>
|
||||
</association>
|
||||
|
||||
<association property="protectLevelMedium"
|
||||
javaType="com.realtime.protection.configuration.entity.defense.template.ProtectLevel">
|
||||
<id column="protect_level_id" property="protectLevelId"/>
|
||||
<result column="has_protect_object_ip" property="hasProtectObjectIP"/>
|
||||
<result column="has_protect_object_port" property="hasProtectObjectPort"/>
|
||||
<result column="has_peer_ip" property="hasPeerIP"/>
|
||||
<result column="has_peer_port" property="hasPeerPort"/>
|
||||
<result column="has_protocol" property="hasProtocol"/>
|
||||
<result column="has_url" property="hasURL"/>
|
||||
<result column="has_dns" property="hasDNS"/>
|
||||
</association>
|
||||
|
||||
<association property="protectLevelHigh"
|
||||
javaType="com.realtime.protection.configuration.entity.defense.template.ProtectLevel">
|
||||
<id column="protect_level_id" property="protectLevelId"/>
|
||||
<result column="has_protect_object_ip" property="hasProtectObjectIP"/>
|
||||
<result column="has_protect_object_port" property="hasProtectObjectPort"/>
|
||||
<result column="has_peer_ip" property="hasPeerIP"/>
|
||||
<result column="has_peer_port" property="hasPeerPort"/>
|
||||
<result column="has_protocol" property="hasProtocol"/>
|
||||
<result column="has_url" property="hasURL"/>
|
||||
<result column="has_dns" property="hasDNS"/>
|
||||
</association>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="protectLevelMap" type="com.realtime.protection.configuration.entity.defense.template.ProtectLevel">
|
||||
<id column="protect_level_id" property="protectLevelId"/>
|
||||
<result column="has_protect_object_ip" property="hasProtectObjectIP"/>
|
||||
<result column="has_protect_object_port" property="hasProtectObjectPort"/>
|
||||
<result column="has_peer_ip" property="hasPeerIP"/>
|
||||
<result column="has_peer_port" property="hasPeerPort"/>
|
||||
<result column="has_protocol" property="hasProtocol"/>
|
||||
<result column="has_url" property="hasURL"/>
|
||||
<result column="has_dns" property="hasDNS"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="queryTemplates" resultMap="templateMap">
|
||||
SELECT * FROM t_strategy_template
|
||||
<!-- 关联查询 -->
|
||||
SELECT * FROM t_strategy_template AS tst
|
||||
LEFT JOIN realtime_protection.t_protect_level low_tpl on low_tpl.protect_level_id =
|
||||
tst.strategy_template_low_level_id
|
||||
LEFT JOIN realtime_protection.t_protect_level medium_tpl on medium_tpl.protect_level_id =
|
||||
tst.strategy_template_medium_level_id
|
||||
LEFT JOIN realtime_protection.t_protect_level high_tpl on high_tpl.protect_level_id =
|
||||
tst.strategy_template_high_level_id
|
||||
<where>
|
||||
<if test="template_name != null">
|
||||
AND strategy_template_name LIKE CONCAT('%', #{template_name}, '%')
|
||||
AND tst.strategy_template_name LIKE CONCAT('%', #{template_name}, '%')
|
||||
</if>
|
||||
</where>
|
||||
LIMIT ${(page - 1) * page_size}, #{page_size}
|
||||
</select>
|
||||
|
||||
<select id="queryProtectLevel" resultMap="protectLevelMap">
|
||||
SELECT *
|
||||
FROM t_protect_level
|
||||
WHERE protect_level_id = #{level_id}
|
||||
</select>
|
||||
|
||||
<update id="updateTemplateInformation">
|
||||
UPDATE t_strategy_template
|
||||
<set>
|
||||
<!-- update template name and default op -->
|
||||
<if test="template.templateName != null">strategy_template_name = #{template.templateName},</if>
|
||||
<if test="template.defaultOp != null">default_op = #{template.defaultOp},</if>
|
||||
|
||||
<!-- update template elements -->
|
||||
<if test="template.hasProtectObjectIP != null">has_protect_object_ip = #{template.hasProtectObjectIP},</if>
|
||||
<if test="template.hasProtectObjectPort != null">
|
||||
has_protect_object_port = {template.hasProtectObjectPort},
|
||||
</if>
|
||||
<if test="template.hasPeerIP != null">has_peer_ip = #{template.hasPeerIP},</if>
|
||||
<if test="template.hasPeerPort != null">has_peer_port = #{template.hasPeerPort},</if>
|
||||
<if test="template.hasProtocol != null">has_protocol = #{template.hasProtocol},</if>
|
||||
<if test="template.hasURL != null">has_url = #{template.hasURL},</if>
|
||||
<if test="template.hasDNS != null">has_dns = #{template.hasDNS},</if>
|
||||
<if test="template.sourceSystem != null">strategy_template_source_system = #{template.sourceSystem},</if>
|
||||
modify_time = NOW()
|
||||
</set>
|
||||
<where>
|
||||
AND strategy_template_id = #{template.templateId}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.realtime.protection.server.defense.template;
|
||||
|
||||
import com.realtime.protection.configuration.entity.defense.template.ProtectLevel;
|
||||
import com.realtime.protection.configuration.entity.defense.template.Template;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -23,26 +24,36 @@ class TemplateServiceTest {
|
||||
|
||||
@BeforeEach
|
||||
void mockTemplate() {
|
||||
|
||||
template = new Template();
|
||||
|
||||
template.setTemplateName("反射型DDOS攻击");
|
||||
template.setTemplateElements(List.of("对端IP", "协议", "URL"));
|
||||
template.setDefaultOp("阻断");
|
||||
template.setSourceSystem("xxxx系统");
|
||||
|
||||
ProtectLevel protectLevelLow = new ProtectLevel();
|
||||
protectLevelLow.setHasPeerPort(true);
|
||||
|
||||
ProtectLevel protectLevelMedium = new ProtectLevel();
|
||||
protectLevelMedium.setHasProtectObjectIP(true);
|
||||
|
||||
ProtectLevel protectLevelHigh = new ProtectLevel();
|
||||
protectLevelHigh.setHasDNS(true);
|
||||
|
||||
template.setProtectLevelLow(protectLevelLow);
|
||||
template.setProtectLevelMedium(protectLevelMedium);
|
||||
template.setProtectLevelHigh(protectLevelHigh);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewTemplateSuccess() {
|
||||
void testNewTemplate() {
|
||||
Integer templateId = templateService.newTemplate(template);
|
||||
assertTrue(templateId > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewTemplateIllegalArgument() {
|
||||
template.setTemplateElements(List.of("DDNS"));
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
Integer templateId = templateService.newTemplate(template);
|
||||
assertTrue(templateId > 0);
|
||||
});
|
||||
void testQueryTemplate() {
|
||||
List<Template> templates = templateService.queryTemplates("DDOS", 1, 5);
|
||||
System.out.println(templates);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -38,13 +38,13 @@ class TaskServiceTest {
|
||||
task.setDynamicRuleIds(List.of());
|
||||
task.setTaskCreateUserId(1);
|
||||
task.setTaskCreateUsername("xxx");
|
||||
task.setTaskCreateDepart("xxx");
|
||||
task.setProtectObjectIds(List.of(1));
|
||||
task.setTaskCreateDepart("xxx");;
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewTaskSuccess() {
|
||||
assertDoesNotThrow(() -> {Integer taskId = taskService.newTask(task); assertTrue(taskId > 0);});
|
||||
assertTrue(task.getTaskId() > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -58,8 +58,36 @@ class TaskServiceTest {
|
||||
|
||||
@Test
|
||||
void testQueryTasks() {
|
||||
List<Task> tasks = taskService.queryTasks(null, null, null, null, 1, 5);
|
||||
assertEquals(5, tasks.size());
|
||||
List<Task> tasks = taskService.queryTasks(null, null, null, null, 1, 10);
|
||||
assertTrue(tasks.get(0).getTaskId() > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUpdateTasks() {
|
||||
task.setStaticRuleIds(List.of(6, 7, 8));
|
||||
task.setTaskId(26);
|
||||
task.setTaskName("修改测试");
|
||||
|
||||
assertTrue(taskService.updateTask(task));
|
||||
assertEquals("修改测试", taskService.queryTask(26).getTaskName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDeleteTask() {
|
||||
int testNum = taskService.queryTasks(null, null, null, null, 1, 10)
|
||||
.get(0).getTaskId();
|
||||
|
||||
assertTrue(taskService.deleteTask(testNum));
|
||||
assertFalse(taskService.deleteTask(235235));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testChangeAuditStatus() {
|
||||
int testNum = taskService.queryTasks(null, null, null, null, 1, 1)
|
||||
.get(0).getTaskId();
|
||||
|
||||
assertTrue(taskService.changeTaskAuditStatus(testNum, 2));
|
||||
assertFalse(taskService.changeTaskAuditStatus(testNum, 0));
|
||||
assertFalse(taskService.changeTaskAuditStatus(testNum, 1));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user