From 8a719709a353f3a0148511d432f766bd0ce636f9 Mon Sep 17 00:00:00 2001 From: EnderByEndera <707475564@qq.com> Date: Fri, 12 Jan 2024 19:24:19 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BFAPI=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../protection/ProtectionApplication.java | 9 +- .../configuration/entity/task/Task.java | 1 - .../exception/GlobalExceptionHandler.java | 12 +- .../response/ResponseResult.java | 2 +- .../swagger/SwaggerConfiguration.java | 2 - .../server/command/CommandMapper.java | 1 - .../server/command/CommandService.java | 1 - .../object/ProtectObjectControllerApi.java | 89 +++++++++++++- .../defense/template/TemplateController.java | 14 ++- .../template/TemplateControllerApi.java | 114 ++++++++++++++++++ .../server/task/TaskControllerApi.java | 3 + .../task/status/states/GeneratingState.java | 2 +- .../task/status/states/RunningState.java | 2 +- .../server/whitelist/WhiteListController.java | 6 +- .../server/whitelist/WhiteListMapper.java | 7 +- .../server/whitelist/WhiteListService.java | 1 + src/main/resources/config/application-dev.yml | 16 ++- .../resources/config/application-prod.yml | 12 +- .../resources/config/application-test.yml | 7 +- src/main/resources/config/application.yml | 3 + src/main/resources/mappers/CommandMapper.xml | 25 ++-- .../resources/mappers/DynamicRuleMapper.xml | 101 ++++++++-------- .../resources/mappers/ProtectObjectMapper.xml | 30 ++--- .../resources/mappers/StaticRuleMapper.xml | 43 +++---- src/main/resources/mappers/TaskMapper.xml | 19 +-- src/main/resources/mappers/TemplateMapper.xml | 7 ++ .../resources/mappers/WhiteListMapper.xml | 46 +++---- .../object/ProtectObjectServiceTest.java | 9 +- .../defense/template/TemplateServiceTest.java | 26 +++- .../server/task/TaskServiceTest.java | 7 +- .../task/status/CommandServiceTest.java | 1 - .../server/user/login/LoginServiceTest.java | 43 ------- .../whitelist/WhiteListServiceTest.java | 11 -- 33 files changed, 450 insertions(+), 222 deletions(-) create mode 100644 src/main/java/com/realtime/protection/server/defense/template/TemplateControllerApi.java create mode 100644 src/main/resources/config/application.yml delete mode 100644 src/test/java/com/realtime/protection/server/user/login/LoginServiceTest.java diff --git a/src/main/java/com/realtime/protection/ProtectionApplication.java b/src/main/java/com/realtime/protection/ProtectionApplication.java index 76df96e..4effcda 100644 --- a/src/main/java/com/realtime/protection/ProtectionApplication.java +++ b/src/main/java/com/realtime/protection/ProtectionApplication.java @@ -1,18 +1,13 @@ package com.realtime.protection; +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; @SpringBootApplication public class ProtectionApplication { public static void main(String[] args) { - SpringApplicationBuilder builder = new SpringApplicationBuilder(ProtectionApplication.class); - - // 在实际环境中应该修改为prod - builder.application().setAdditionalProfiles("test"); - - builder.run(args); + SpringApplication.run(ProtectionApplication.class, args); } } diff --git a/src/main/java/com/realtime/protection/configuration/entity/task/Task.java b/src/main/java/com/realtime/protection/configuration/entity/task/Task.java index 5fca3c0..84c7d39 100644 --- a/src/main/java/com/realtime/protection/configuration/entity/task/Task.java +++ b/src/main/java/com/realtime/protection/configuration/entity/task/Task.java @@ -1,7 +1,6 @@ package com.realtime.protection.configuration.entity.task; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Future; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java b/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java index d669a38..f7c9a00 100644 --- a/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.exceptions.PersistenceException; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.core.annotation.Order; +import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -27,7 +28,7 @@ public class GlobalExceptionHandler { } @Order(3) - @ExceptionHandler(value = Exception.class) + @ExceptionHandler(value = {Exception.class}) public ResponseResult handleGlobalException(Exception e) { log.error("meets global exception: " + e.getMessage()); return ResponseResult.error().setMessage(e.getMessage()); @@ -35,13 +36,20 @@ public class GlobalExceptionHandler { @Order(2) - @ExceptionHandler(value = PersistenceException.class) + @ExceptionHandler(value = {PersistenceException.class}) public ResponseResult handleSQLException(PersistenceException e) { log.error("meets database exception: " + e.getMessage()); return ResponseResult.invalid().setMessage( "please check the integrity of the data. check if the json data exists in the database"); } + @Order(2) + @ExceptionHandler(value = DuplicateKeyException.class) + public ResponseResult handleDuplicateKeyException(DuplicateKeyException e) { + log.debug("meets duplicate key exception: " + e.getMessage()); + return ResponseResult.invalid().setMessage("duplicate key in json data"); + } + @Order(2) @ExceptionHandler(value = MethodArgumentNotValidException.class) public ResponseResult handleBindException(MethodArgumentNotValidException e) { diff --git a/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java b/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java index d710830..7277cb8 100644 --- a/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java +++ b/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java @@ -8,7 +8,7 @@ import java.util.LinkedHashMap; import java.util.Map; @Data -@Schema(name = "通用返回对象", description = "用于所有接口返回的通用返回对象") +@Schema(description = "用于所有接口返回的通用返回对象") public class ResponseResult implements Serializable { @Schema(description = "状态码") diff --git a/src/main/java/com/realtime/protection/configuration/swagger/SwaggerConfiguration.java b/src/main/java/com/realtime/protection/configuration/swagger/SwaggerConfiguration.java index 6414074..58dcbd0 100644 --- a/src/main/java/com/realtime/protection/configuration/swagger/SwaggerConfiguration.java +++ b/src/main/java/com/realtime/protection/configuration/swagger/SwaggerConfiguration.java @@ -3,8 +3,6 @@ package com.realtime.protection.configuration.swagger; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Contact; import io.swagger.v3.oas.annotations.info.Info; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; @OpenAPIDefinition( info = @Info( diff --git a/src/main/java/com/realtime/protection/server/command/CommandMapper.java b/src/main/java/com/realtime/protection/server/command/CommandMapper.java index 581b5db..751cc8c 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandMapper.java +++ b/src/main/java/com/realtime/protection/server/command/CommandMapper.java @@ -1,6 +1,5 @@ package com.realtime.protection.server.command; -import com.baomidou.dynamic.datasource.annotation.DS; import com.realtime.protection.configuration.entity.task.Command; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/src/main/java/com/realtime/protection/server/command/CommandService.java b/src/main/java/com/realtime/protection/server/command/CommandService.java index 98b510e..4bcb645 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandService.java +++ b/src/main/java/com/realtime/protection/server/command/CommandService.java @@ -7,7 +7,6 @@ import com.realtime.protection.configuration.entity.task.TaskCommandInfo; import com.realtime.protection.configuration.exception.DorisStartException; import com.realtime.protection.configuration.utils.SqlSessionWrapper; import com.realtime.protection.configuration.utils.enums.StateEnum; -import com.realtime.protection.server.task.TaskMapper; import com.realtime.protection.server.task.TaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java index 6447900..6a2966b 100644 --- a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java +++ b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java @@ -12,7 +12,6 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; -import org.apache.coyote.Response; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -86,7 +85,10 @@ public interface ProtectObjectControllerApi { ) }, parameters = { - @Parameter() + @Parameter(name = "proobj_name", description = "防护对象名称"), + @Parameter(name = "proobj_id", description = "防护对象ID"), + @Parameter(name = "page", description = "页码", example = "1"), + @Parameter(name = "page_size", description = "每页的对象个数", example = "5") } ) ResponseResult queryProtectObjects(@RequestParam(value = "proobj_name", required = false) @@ -97,19 +99,102 @@ public interface ProtectObjectControllerApi { @RequestParam("page_size") @Min(1) Integer pageSize); @GetMapping("/{protectObjectId}/query") + @Operation( + summary = "查询单个防护对象", + description = "根据ID查询单个防护对象的信息", + responses = { + @ApiResponse( + description = "返回单个防护对象信息", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "protectObjectId", description = "防护对象ID", example = "2") + } + ) ResponseResult queryProtectObject(@PathVariable Integer protectObjectId) throws IllegalAccessException; @PostMapping("/{protectObjectId}/update") + @Operation( + summary = "更新防护对象", + description = "根据防护对象ID和信息更新防护对象", + responses = { + @ApiResponse( + description = "防护对象更新情况", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "protectObjectId", description = "防护对象ID", example = "2") + }, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(description = "防护对象更新信息") + ) ResponseResult updateProtectObject(@PathVariable Integer protectObjectId, @RequestBody @Valid ProtectObject protectObject); + @DeleteMapping("/{protectObjectId}/delete") + @Operation( + summary = "删除防护对象", + description = "根据防护对象ID删除对应防护对象", + responses = { + @ApiResponse( + description = "防护对象删除情况", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "protectObjectId", description = "欲删除的防护对象ID", example = "2") + } + ) ResponseResult deleteProtectObject(@PathVariable Integer protectObjectId); @DeleteMapping("/delete/{protectObjectIds}") + @Operation( + summary = "批量删除防护对象", + description = "根据多个对象ID删除多个防护对象", + responses = { + @ApiResponse( + description = "防护对象删除情况", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "protectObjectIds", description = "欲删除的多个防护对象ID", example = "1,2,3,4") + } + ) ResponseResult deleteProtectObject(@PathVariable List protectObjectIds); @GetMapping("/{protectObjectId}/audit/{auditStatus}") + @Operation( + summary = "修改防护对象审核状态", + description = "修改指定防护对象ID对应的防护对象的审核状态", + responses = { + @ApiResponse( + description = "防护对象审核状态修改情况", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "protectObjectId", description = "欲修改的防护对象ID", example = "2"), + @Parameter(name = "auditStatus", description = "欲修改的审核状态", example = "2") + } + ) ResponseResult changeProtectObjectAuditStatus(@PathVariable Integer protectObjectId, @PathVariable Integer 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 64d0487..e6130f1 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 @@ -11,7 +11,7 @@ import java.util.List; @RestController @RequestMapping("/template") -public class TemplateController { +public class TemplateController implements TemplateControllerApi { private final TemplateService templateService; @@ -19,6 +19,7 @@ public class TemplateController { this.templateService = templateService; } + @Override @PostMapping("/new") public ResponseResult newTemplate(@RequestBody @Valid Template template) { @@ -35,6 +36,7 @@ public class TemplateController { .setData("success", false); } + @Override @GetMapping("/query") public ResponseResult queryTemplates(@RequestParam(value = "template_name", required = false) String templateName, @RequestParam("page") @Min(1) Integer page, @@ -45,12 +47,19 @@ public class TemplateController { .setData("templates", templates); } + @Override @GetMapping("/{templateId}/query") public ResponseResult queryTemplate(@PathVariable Integer templateId) throws IllegalAccessException { + Template template = templateService.queryTemplate(templateId); + if (template == null) { + return ResponseResult.invalid() + .setMessage("invalid templateId, maybe this template doesn't exist?"); + } return ResponseResult.ok() - .setDataMap(EntityUtils.entityToMap(templateService.queryTemplate(templateId))); + .setDataMap(EntityUtils.entityToMap(template)); } + @Override @PostMapping("/{templateId}/update") public ResponseResult updateTemplate(@PathVariable @Min(1) Integer templateId, @RequestBody @Valid Template template) { @@ -60,6 +69,7 @@ public class TemplateController { .setData("success", success); } + @Override @DeleteMapping("/{templateId}/delete") public ResponseResult deleteTemplate(@PathVariable @Min(1) Integer templateId) { return ResponseResult.ok() diff --git a/src/main/java/com/realtime/protection/server/defense/template/TemplateControllerApi.java b/src/main/java/com/realtime/protection/server/defense/template/TemplateControllerApi.java new file mode 100644 index 0000000..017a24f --- /dev/null +++ b/src/main/java/com/realtime/protection/server/defense/template/TemplateControllerApi.java @@ -0,0 +1,114 @@ +package com.realtime.protection.server.defense.template; + +import com.realtime.protection.configuration.entity.defense.template.Template; +import com.realtime.protection.configuration.response.ResponseResult; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "防御策略模板API", description = "防御策略模板模块所有接口") +public interface TemplateControllerApi { + @PostMapping("/new") + @Operation( + summary = "新建防御策略模板", + description = "根据信息新建一个防护策略模板", + responses = { + @ApiResponse( + description = "返回新建防御策略模板结果", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(description = "防御策略模板信息") + ) + ResponseResult newTemplate(@RequestBody @Valid Template template); + + @GetMapping("/query") + @Operation( + summary = "查询多个防御策略模板", + description = "根据查询条件查询多个防御策略模板", + responses = { + @ApiResponse( + description = "返回所有查询到的防御策略模板", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "template_name", description = "防御策略模板名称", example = "DDOS"), + @Parameter(name = "page", description = "页码", example = "1"), + @Parameter(name = "page_size", description = "每页对象数量", example = "5") + } + ) + ResponseResult queryTemplates(@RequestParam(value = "template_name", required = false) String templateName, + @RequestParam("page") @Min(1) Integer page, + @RequestParam("page_size") @Min(1) Integer pageSize); + + @GetMapping("/{templateId}/query") + @Operation( + summary = "查询单个防御策略模板", + description = "根据模板ID查询单个防御策略模板信息", + responses = { + @ApiResponse( + description = "返回单个防御策略模板信息", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "templateId", description = "防御策略模板ID", example = "5") + } + ) + ResponseResult queryTemplate(@PathVariable Integer templateId) throws IllegalAccessException; + + @PostMapping("/{templateId}/update") + @Operation( + summary = "更新防御策略模板信息", + description = "根据提供的防御策略模板信息更新指定ID对应的防御策略模板", + responses = { + @ApiResponse( + description = "返回防御策略模板信息更新结果", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "templateId", description = "防御策略模板ID", example = "5") + } + ) + ResponseResult updateTemplate(@PathVariable @Min(1) Integer templateId, + @RequestBody @Valid Template template); + + @DeleteMapping("/{templateId}/delete") + @Operation( + summary = "删除防御策略模板信息", + description = "根据策略模板ID删除指定的防御策略模板信息", + responses = { + @ApiResponse( + description = "返回防御策略模板删除结果", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseResult.class) + ) + ) + }, + parameters = { + @Parameter(name = "templateId", description = "防御策略模板ID", example = "5") + } + ) + ResponseResult deleteTemplate(@PathVariable @Min(1) Integer templateId); +} diff --git a/src/main/java/com/realtime/protection/server/task/TaskControllerApi.java b/src/main/java/com/realtime/protection/server/task/TaskControllerApi.java index 6d90a40..f904e68 100644 --- a/src/main/java/com/realtime/protection/server/task/TaskControllerApi.java +++ b/src/main/java/com/realtime/protection/server/task/TaskControllerApi.java @@ -93,6 +93,9 @@ public interface TaskControllerApi { ) ) }, + parameters = { + @Parameter(name = "taskId", description = "任务ID") + }, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "任务信息,必须包含任务原有的或者添加/删除部分后的static_rule_ids和dynamic_rule_ids" ) diff --git a/src/main/java/com/realtime/protection/server/task/status/states/GeneratingState.java b/src/main/java/com/realtime/protection/server/task/status/states/GeneratingState.java index c9e059e..e049636 100644 --- a/src/main/java/com/realtime/protection/server/task/status/states/GeneratingState.java +++ b/src/main/java/com/realtime/protection/server/task/status/states/GeneratingState.java @@ -10,7 +10,7 @@ import com.realtime.protection.server.task.status.StateHandler; public class GeneratingState extends StateHandler implements State { @Override public Boolean handle(State newState, CommandService commandService, TaskService taskService, Long taskId) throws DorisStartException { - return switch(StateEnum.getStateEnumByState(newState)) { + return switch (StateEnum.getStateEnumByState(newState)) { case RUNNING, GENERATING -> true; case FAILED -> handleFailed(commandService, taskId); default -> throw new IllegalStateException("Unexpected value: " + StateEnum.getStateEnumByState(newState)); diff --git a/src/main/java/com/realtime/protection/server/task/status/states/RunningState.java b/src/main/java/com/realtime/protection/server/task/status/states/RunningState.java index 85514c2..cbe61db 100644 --- a/src/main/java/com/realtime/protection/server/task/status/states/RunningState.java +++ b/src/main/java/com/realtime/protection/server/task/status/states/RunningState.java @@ -9,7 +9,7 @@ import com.realtime.protection.server.task.status.StateHandler; public class RunningState extends StateHandler implements State { @Override public Boolean handle(State newState, CommandService commandService, TaskService taskService, Long taskId) { - return switch(StateEnum.getStateEnumByState(newState)) { + return switch (StateEnum.getStateEnumByState(newState)) { case RUNNING, GENERATING -> true; case PAUSED -> handlePause(commandService, taskId); case STOP -> handleStop(commandService, taskId); diff --git a/src/main/java/com/realtime/protection/server/whitelist/WhiteListController.java b/src/main/java/com/realtime/protection/server/whitelist/WhiteListController.java index 5ae3d89..a44e290 100644 --- a/src/main/java/com/realtime/protection/server/whitelist/WhiteListController.java +++ b/src/main/java/com/realtime/protection/server/whitelist/WhiteListController.java @@ -125,9 +125,9 @@ public class WhiteListController { //查询ip是否存在于白名单 - @RequestMapping ("/exist") - public ResponseResult existWhiteListObject(@RequestParam(value = "ruleId", required = true)Integer ruleId, - @RequestParam(value = "ruleType", required = true)Integer ruleType) { + @RequestMapping("/exist") + public ResponseResult existWhiteListObject(@RequestParam(value = "ruleId", required = true) Integer ruleId, + @RequestParam(value = "ruleType", required = true) Integer ruleType) { //是请求规则的id,然后判断这个id所属的ip是否在白名单中吗 //静态应该可以,但动态的,动态是实时过来告警信息,不存储规则? 存的话也行,那这里要区分id是静态的还是动态的 //这里先走通静态的,要获取规则的源IP和目的IP,去白名单select看有没有(有的还有IP掩码,暂未实现) diff --git a/src/main/java/com/realtime/protection/server/whitelist/WhiteListMapper.java b/src/main/java/com/realtime/protection/server/whitelist/WhiteListMapper.java index f31c6eb..dfdbc3f 100644 --- a/src/main/java/com/realtime/protection/server/whitelist/WhiteListMapper.java +++ b/src/main/java/com/realtime/protection/server/whitelist/WhiteListMapper.java @@ -14,23 +14,26 @@ public interface WhiteListMapper { //新建 void newWhiteListObject(@Param("object") WhiteListObject object); + //分页查询 List queryWhiteListObject(String whiteListName, Integer whiteListId, Integer page, Integer pageSize); + //根据主键查询 WhiteListObject queryWhiteListObjectById(Integer id); + //根据主键删除 @Delete("delete from t_white_list where white_list_id = #{id}") Integer deleteWhiteListObject(Integer id); Integer updateWhiteListObject(@Param("object") WhiteListObject object); - List existWhiteListObject(@Param("staticRuleObject")StaticRuleObject staticRuleObject); + List existWhiteListObject(@Param("staticRuleObject") StaticRuleObject staticRuleObject); Integer queryWhiteListObjectAuditStuatusById(Integer id); Boolean updateWhiteListObjectAuditStatus(Integer id, Integer status); - void newWhiteListObjects(@Param("whiteListObjects")List whiteListBatch); + void newWhiteListObjects(@Param("whiteListObjects") List whiteListBatch); void deleteWhiteListObjects(@Param("whiteListIds") List whiteListBatch); 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 d3ea5fd..5105edd 100644 --- a/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java +++ b/src/main/java/com/realtime/protection/server/whitelist/WhiteListService.java @@ -128,6 +128,7 @@ public class WhiteListService { return whiteListMapper.existWhiteListObject(staticRuleObject); } + public List whiteListCommandJudge(Command command) { //参数应该是指令,不管动态静态 // 命中的whitelist列表:每一列包含ip port url diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index c4d6923..cd27f86 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -4,6 +4,8 @@ server: logging: level: com.realtime.protection: debug + file: + name: classpath:log/realtime_protection.log spring: datasource: @@ -39,7 +41,13 @@ mybatis: task: pool: - core-pool-size: 1 - max-pool-size: 1 - queue-capacity: 1 - keep-alive-seconds: 120 \ No newline at end of file + core-pool-size: 50 + max-pool-size: 100 + queue-capacity: 50 + keep-alive-seconds: 120 + +springdoc: + api-docs: + enabled: false + swagger-ui: + enabled: false \ No newline at end of file diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml index 279bb6a..d2be8fb 100644 --- a/src/main/resources/config/application-prod.yml +++ b/src/main/resources/config/application-prod.yml @@ -1,9 +1,11 @@ server: - port: 8081 + port: 80 logging: level: com.realtime.protection: warning + file: + name: classpath:log/realtime_protection.log spring: datasource: @@ -41,4 +43,10 @@ task: core-pool-size: 20 max-pool-size: 100 queue-capacity: 100 - keep-alive-seconds: 60 \ No newline at end of file + keep-alive-seconds: 120 + +springdoc: + api-docs: + enabled: false + swagger-ui: + enabled: false \ No newline at end of file diff --git a/src/main/resources/config/application-test.yml b/src/main/resources/config/application-test.yml index a65f7b7..b2b1f12 100644 --- a/src/main/resources/config/application-test.yml +++ b/src/main/resources/config/application-test.yml @@ -4,7 +4,8 @@ server: logging: level: com.realtime.protection: info - + file: + name: classpath:log/realtime_protection.log spring: datasource: @@ -26,7 +27,7 @@ spring: aop: enabled: true primary: mysql - strict: true + strict: false grace-destroy: true mvc: servlet: @@ -42,7 +43,7 @@ task: core-pool-size: 20 max-pool-size: 100 queue-capacity: 100 - keep-alive-seconds: 60 + keep-alive-seconds: 120 springdoc: api-docs: diff --git a/src/main/resources/config/application.yml b/src/main/resources/config/application.yml new file mode 100644 index 0000000..64cd030 --- /dev/null +++ b/src/main/resources/config/application.yml @@ -0,0 +1,3 @@ +spring: + config: + import: classpath:config/application-test.yml \ No newline at end of file diff --git a/src/main/resources/mappers/CommandMapper.xml b/src/main/resources/mappers/CommandMapper.xml index 5557247..8a7b5bb 100644 --- a/src/main/resources/mappers/CommandMapper.xml +++ b/src/main/resources/mappers/CommandMapper.xml @@ -4,7 +4,8 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - insert into t_command(COMMAND_ID, ADDR_TYPE, SRC_IP, SRC_PORT, DST_IP, DST_PORT, PROTOCOL, MASK_SRC_IP, MASK_SRC_PORT, + insert into t_command(COMMAND_ID, ADDR_TYPE, SRC_IP, SRC_PORT, DST_IP, DST_PORT, PROTOCOL, MASK_SRC_IP, + MASK_SRC_PORT, MASK_DST_IP, MASK_DST_PORT, IS_VALID, VALID_TIME, INVALID_TIME, IS_SENT, CREATE_TIME, LAST_UPDATE, IS_DELETED, TASK_ID) values (UUID(), DEFAULT, @@ -18,9 +19,10 @@ - insert into t_command(COMMAND_ID, ADDR_TYPE, SRC_IP, SRC_PORT, DST_IP, DST_PORT, PROTOCOL, MASK_SRC_IP, MASK_SRC_PORT, - MASK_DST_IP, MASK_DST_PORT, IS_VALID, VALID_TIME, INVALID_TIME, IS_SENT, - CREATE_TIME, LAST_UPDATE, IS_DELETED, TASK_ID) + insert into t_command(COMMAND_ID, ADDR_TYPE, SRC_IP, SRC_PORT, DST_IP, DST_PORT, PROTOCOL, MASK_SRC_IP, + MASK_SRC_PORT, + MASK_DST_IP, MASK_DST_PORT, IS_VALID, VALID_TIME, INVALID_TIME, IS_SENT, + CREATE_TIME, LAST_UPDATE, IS_DELETED, TASK_ID) values (UUID(), DEFAULT, @@ -36,19 +38,24 @@ UPDATE t_command - SET IS_VALID = FALSE, LAST_UPDATE = NOW() - WHERE TASK_ID = #{task_id} AND IS_DELETED = FALSE + SET IS_VALID = FALSE, + LAST_UPDATE = NOW() + WHERE TASK_ID = #{task_id} + AND IS_DELETED = FALSE UPDATE t_command - SET IS_VALID = TRUE, LAST_UPDATE = NOW() - WHERE TASK_ID = #{task_id} AND IS_DELETED = FALSE + SET IS_VALID = TRUE, + LAST_UPDATE = NOW() + WHERE TASK_ID = #{task_id} + AND IS_DELETED = FALSE UPDATE t_command - SET IS_DELETED = TRUE, LAST_UPDATE = NOW() + SET IS_DELETED = TRUE, + LAST_UPDATE = NOW() WHERE TASK_ID = #{task_id} diff --git a/src/main/resources/mappers/DynamicRuleMapper.xml b/src/main/resources/mappers/DynamicRuleMapper.xml index d7fc004..43a3d2b 100644 --- a/src/main/resources/mappers/DynamicRuleMapper.xml +++ b/src/main/resources/mappers/DynamicRuleMapper.xml @@ -4,42 +4,40 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - + + insert into t_dynamic_rule - (dynamic_rule_name, - create_time, modify_time, dynamic_rule_create_username, - dynamic_rule_create_depart, dynamic_rule_source_system, - dynamic_rule_event_type, dynamic_rule_protec_level, - dynamic_rule_priority, dynamic_rule_range, - dynamic_rule_frequency, dynamic_rule_create_user_id) - values - (#{object.dynamicRuleName}, - #{object.dynamicRuleCreateTime},#{object.dynamicRuleModifyTime}, - #{object.dynamicRuleCreateUsername},#{object.dynamicRuleCreateDepart}, - #{object.dynamicRuleSourceSystem}, - #{object.dynamicRuleEventType}, #{object.dynamicRuleProtectLevel}, - #{object.dynamicRulePriority}, #{object.dynamicRuleRange}, - #{object.dynamicRuleFrequency}, - #{object.dynamicRuleCreateUserId}) + (dynamic_rule_name, + create_time, modify_time, dynamic_rule_create_username, + dynamic_rule_create_depart, dynamic_rule_source_system, + dynamic_rule_event_type, dynamic_rule_protec_level, + dynamic_rule_priority, dynamic_rule_range, + dynamic_rule_frequency, dynamic_rule_create_user_id) + values (#{object.dynamicRuleName}, + #{object.dynamicRuleCreateTime}, #{object.dynamicRuleModifyTime}, + #{object.dynamicRuleCreateUsername}, #{object.dynamicRuleCreateDepart}, + #{object.dynamicRuleSourceSystem}, + #{object.dynamicRuleEventType}, #{object.dynamicRuleProtectLevel}, + #{object.dynamicRulePriority}, #{object.dynamicRuleRange}, + #{object.dynamicRuleFrequency}, + #{object.dynamicRuleCreateUserId}) - insert into - t_protect_object_dynamic_rule_conn(dynamic_rule_id, protect_object_id) + insert into t_protect_object_dynamic_rule_conn(dynamic_rule_id, protect_object_id) values (#{dynamicRuleId}, #{protectObjectId}) insert into t_dynamic_rule - (dynamic_rule_name, - create_time, modify_time, dynamic_rule_create_username, - dynamic_rule_create_depart, dynamic_rule_source_system, - dynamic_rule_event_type, dynamic_rule_protec_level, - dynamic_rule_priority, dynamic_rule_range, - dynamic_rule_frequency, dynamic_rule_create_user_id + (dynamic_rule_name, + create_time, modify_time, dynamic_rule_create_username, + dynamic_rule_create_depart, dynamic_rule_source_system, + dynamic_rule_event_type, dynamic_rule_protec_level, + dynamic_rule_priority, dynamic_rule_range, + dynamic_rule_frequency, dynamic_rule_create_user_id ) values @@ -56,18 +54,20 @@ - - - - - + + + + + - delete from t_dynamic_rule + delete + from t_dynamic_rule where dynamic_rule_id = #{dynamicRuleId} - + - delete from t_protect_object_dynamic_rule_conn + delete + from t_protect_object_dynamic_rule_conn where dynamic_rule_id = #{dynamicRuleId} @@ -83,20 +83,25 @@ update t_dynamic_rule set - dynamic_rule_name = #{object.dynamicRuleName}, - modify_time = #{object.dynamicRuleModifyTime}, - dynamic_rule_source_system = #{object.dynamicRuleSourceSystem}, - dynamic_rule_event_type = #{object.dynamicRuleEventType}, - dynamic_rule_protec_level = #{object.dynamicRuleProtectLevel}, - dynamic_rule_priority = #{object.dynamicRulePriority}, - dynamic_rule_range = #{object.dynamicRuleRange}, - dynamic_rule_frequency = #{object.dynamicRuleFrequency} + dynamic_rule_name = #{object.dynamicRuleName}, + modify_time = #{object.dynamicRuleModifyTime}, + dynamic_rule_source_system = + #{object.dynamicRuleSourceSystem}, + + dynamic_rule_event_type = #{object.dynamicRuleEventType}, + dynamic_rule_protec_level = + #{object.dynamicRuleProtectLevel}, + + dynamic_rule_priority = #{object.dynamicRulePriority}, + dynamic_rule_range = #{object.dynamicRuleRange}, + dynamic_rule_frequency = #{object.dynamicRuleFrequency} where - dynamic_rule_id = #{dynamicRuleId} + dynamic_rule_id = #{dynamicRuleId} - + @@ -114,7 +119,7 @@ @@ -133,10 +138,10 @@ @@ -79,7 +80,8 @@ - DELETE FROM t_protect_object + DELETE + FROM t_protect_object WHERE protect_object_id = #{proobj_id} diff --git a/src/main/resources/mappers/StaticRuleMapper.xml b/src/main/resources/mappers/StaticRuleMapper.xml index 26947db..af362e2 100644 --- a/src/main/resources/mappers/StaticRuleMapper.xml +++ b/src/main/resources/mappers/StaticRuleMapper.xml @@ -26,13 +26,13 @@ insert into t_static_rule(static_rule_name, static_rule_create_time, - static_rule_create_username, static_rule_create_depart, - static_rule_create_user_id, static_rule_sip, static_rule_msip, - static_rule_sport, static_rule_msport, - static_rule_dip, static_rule_mdip, static_rule_dport, static_rule_mdport, - static_rule_protocol, static_rule_mprotocol, static_rule_dns, - static_rule_url, static_rule_priority, static_rule_range, - static_rule_frequency, static_rule_audit_status) + static_rule_create_username, static_rule_create_depart, + static_rule_create_user_id, static_rule_sip, static_rule_msip, + static_rule_sport, static_rule_msport, + static_rule_dip, static_rule_mdip, static_rule_dport, static_rule_mdport, + static_rule_protocol, static_rule_mprotocol, static_rule_dns, + static_rule_url, static_rule_priority, static_rule_range, + static_rule_frequency, static_rule_audit_status) values (#{object.staticRuleName}, #{object.staticRuleCreateTime}, #{object.staticRuleCreateUsername}, @@ -53,18 +53,18 @@ static_rule_name = #{staticRuleName}, - static_rule_sip = INET_ATON(#{staticRuleSip}), - static_rule_msip = INET_ATON(#{staticRuleMsip}), - static_rule_sport = #{staticRuleSport}, - static_rule_msport = #{staticRuleMsport}, - static_rule_dip = INET_ATON(#{staticRuleDip}), - static_rule_mdip = INET_ATON(#{staticRuleMdip}), - static_rule_dport = #{staticRuleDport}, - static_rule_mdport = #{staticRuleMdport}, - static_rule_protocol = #{staticRuleProtocol}, - static_rule_mprotocol = #{staticRuleMprotocol}, - static_rule_dns = #{staticRuleDns}, - static_rule_url = #{staticRuleURL}, + static_rule_sip = INET_ATON(#{staticRuleSip}), + static_rule_msip = INET_ATON(#{staticRuleMsip}), + static_rule_sport = #{staticRuleSport}, + static_rule_msport = #{staticRuleMsport}, + static_rule_dip = INET_ATON(#{staticRuleDip}), + static_rule_mdip = INET_ATON(#{staticRuleMdip}), + static_rule_dport = #{staticRuleDport}, + static_rule_mdport = #{staticRuleMdport}, + static_rule_protocol = #{staticRuleProtocol}, + static_rule_mprotocol = #{staticRuleMprotocol}, + static_rule_dns = #{staticRuleDns}, + static_rule_url = #{staticRuleURL}, static_rule_priority = #{staticRulePriority}, @@ -98,7 +98,7 @@ - SELECT * FROM t_static_rule @@ -112,7 +112,8 @@ diff --git a/src/main/resources/mappers/TaskMapper.xml b/src/main/resources/mappers/TaskMapper.xml index 8aea223..f3b8aad 100644 --- a/src/main/resources/mappers/TaskMapper.xml +++ b/src/main/resources/mappers/TaskMapper.xml @@ -120,7 +120,8 @@ UPDATE t_static_rule - SET static_rule_used_task_id = null, static_rule_modify_time = NOW() + SET static_rule_used_task_id = null, + static_rule_modify_time = NOW() WHERE static_rule_used_task_id = #{task_id} @@ -132,18 +133,21 @@ UPDATE t_task - SET task_audit_status = #{audit_status}, task_modify_time = NOW() + SET task_audit_status = #{audit_status}, + task_modify_time = NOW() WHERE task_id = #{task_id} UPDATE t_task - SET task_status = #{state}, task_modify_time = NOW() + SET task_status = #{state}, + task_modify_time = NOW() WHERE task_id = #{task_id} - DELETE FROM t_task + DELETE + FROM t_task WHERE task_id = #{task_id} @@ -175,9 +179,9 @@ t_task.task_act, t_task.task_start_time, t_task.task_end_time, - INET_NTOA(tsr.static_rule_sip) as static_rule_sip, + INET_NTOA(tsr.static_rule_sip) as static_rule_sip, tsr.static_rule_sport, - INET_NTOA(tsr.static_rule_dip) as static_rule_dip, + INET_NTOA(tsr.static_rule_dip) as static_rule_dip, tsr.static_rule_dport, tsr.static_rule_protocol, INET_NTOA(tsr.static_rule_msip) as static_rule_msip, @@ -187,6 +191,7 @@ tsr.static_rule_frequency FROM t_task LEFT JOIN realtime_protection.t_static_rule tsr on t_task.task_id = tsr.static_rule_used_task_id - WHERE task_id = #{task_id} AND tsr.static_rule_audit_status = 2 + WHERE task_id = #{task_id} + AND tsr.static_rule_audit_status = 2 \ No newline at end of file diff --git a/src/main/resources/mappers/TemplateMapper.xml b/src/main/resources/mappers/TemplateMapper.xml index a202684..303f379 100644 --- a/src/main/resources/mappers/TemplateMapper.xml +++ b/src/main/resources/mappers/TemplateMapper.xml @@ -93,6 +93,13 @@ LIMIT ${(page - 1) * page_size}, #{page_size} + + @@ -63,7 +63,8 @@ @@ -139,27 +140,28 @@ - + 可能还要做的: + (1)端口掩码 + (2)协议 + (3)url + -->