parent
2934fb902d
commit
34462a418c
|
@ -13,11 +13,15 @@ import com.dispose.pojo.dto.protocol.base.IdArraysReq;
|
||||||
import com.dispose.pojo.dto.protocol.base.ProtocolReqDTO;
|
import com.dispose.pojo.dto.protocol.base.ProtocolReqDTO;
|
||||||
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
|
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
|
||||||
import com.dispose.pojo.dto.protocol.device.manager.BasePagesGetReq;
|
import com.dispose.pojo.dto.protocol.device.manager.BasePagesGetReq;
|
||||||
|
import com.dispose.pojo.dto.protocol.task.DisposeObject;
|
||||||
|
import com.dispose.pojo.dto.protocol.task.DisposeTaskStartReq;
|
||||||
|
import com.dispose.pojo.dto.protocol.task.DisposeTaskStartRsp;
|
||||||
import com.dispose.pojo.dto.protocol.task.GetDeviceTaskDetail;
|
import com.dispose.pojo.dto.protocol.task.GetDeviceTaskDetail;
|
||||||
import com.dispose.pojo.dto.protocol.task.GetTaskDetail;
|
import com.dispose.pojo.dto.protocol.task.GetTaskDetail;
|
||||||
import com.dispose.pojo.dto.protocol.task.GetTaskRsp;
|
import com.dispose.pojo.dto.protocol.task.GetTaskRsp;
|
||||||
import com.dispose.pojo.dto.protocol.task.IpTaskStartReq;
|
import com.dispose.pojo.dto.protocol.task.IpTaskStartReq;
|
||||||
import com.dispose.pojo.dto.protocol.task.IpTaskStartRsp;
|
import com.dispose.pojo.dto.protocol.task.IpTaskStartRsp;
|
||||||
|
import com.dispose.pojo.dto.protocol.task.TaskStartInfo;
|
||||||
import com.dispose.pojo.dto.protocol.task.TaskStartMulRsp;
|
import com.dispose.pojo.dto.protocol.task.TaskStartMulRsp;
|
||||||
import com.dispose.pojo.dto.protocol.task.TaskStopItem;
|
import com.dispose.pojo.dto.protocol.task.TaskStopItem;
|
||||||
import com.dispose.pojo.dto.protocol.task.TaskStopRsp;
|
import com.dispose.pojo.dto.protocol.task.TaskStopRsp;
|
||||||
|
@ -80,6 +84,70 @@ public class DisposeTaskController {
|
||||||
@Resource
|
@Resource
|
||||||
private UserAccountService userAccountService;
|
private UserAccountService userAccountService;
|
||||||
|
|
||||||
|
@PostMapping("/startDispose")
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("启动处置任务")
|
||||||
|
|
||||||
|
public ProtocolRespDTO<DisposeTaskStartRsp> startDisposeTask(@Validated(ValidGroups.TaskStartReqValid.class)
|
||||||
|
@RequestBody ProtocolReqDTO<DisposeTaskStartReq> mr,
|
||||||
|
@NotNull @RequestHeader HttpHeaders headers) {
|
||||||
|
DisposeTaskStartReq req = mr.getMsgContent();
|
||||||
|
Long devId = Long.parseLong(Optional.ofNullable(req.getDeviceId()).orElse("-1"));
|
||||||
|
Long aId = userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization")).get(0));
|
||||||
|
DisposeCapacityType capType = CommonEnumHandler.codeOf(DisposeCapacityType.class, req.getType());
|
||||||
|
String endTime = String.valueOf(req.getDisposeTime());
|
||||||
|
NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class,
|
||||||
|
Optional.ofNullable(req.getFlowDirection()).orElse(2));
|
||||||
|
Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType())
|
||||||
|
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
|
||||||
|
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
|
||||||
|
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
|
||||||
|
|
||||||
|
DisposeTaskStartRsp rspInfo = DisposeTaskStartRsp.builder()
|
||||||
|
.items(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
for (DisposeObject v : req.getDisposeObjects()) {
|
||||||
|
|
||||||
|
DisposeObjectType t = CommonEnumHandler.codeOf(DisposeObjectType.class, v.getObjectType());
|
||||||
|
// 构造处置任务参数
|
||||||
|
DisposeTask task = DisposeTask.builder()
|
||||||
|
.deviceId(devId)
|
||||||
|
.accountId(aId)
|
||||||
|
.disposeCapacity(capType)
|
||||||
|
.disposeObject(Helper.ipAddressNormalize(v.getDisposeObject()))
|
||||||
|
.objectType(t)
|
||||||
|
.planEndTime(endTime)
|
||||||
|
.flowDirection(netDir)
|
||||||
|
.attackType(attackType)
|
||||||
|
.flowBandWidth(flowBand)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 创建处置任务
|
||||||
|
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
||||||
|
|
||||||
|
// 设置返回消息
|
||||||
|
TaskStartInfo rspItem = TaskStartInfo.builder()
|
||||||
|
.disposeObject(v.getDisposeObject())
|
||||||
|
.objectType(v.getObjectType())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 启动任务成功
|
||||||
|
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
|
||||||
|
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
|
||||||
|
rspItem.setTaskId(ret.getSecondParam().getId().toString());
|
||||||
|
rspItem.setExpireTime(ret.getSecondParam().getPlanEndTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
rspItem.setStatus(ret.getFirstParam().getCode());
|
||||||
|
rspItem.setMessage(new String[]{ret.getFirstParam().getMsg()});
|
||||||
|
|
||||||
|
rspInfo.getItems().add(rspItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start task protocol resp dto.
|
* Start task protocol resp dto.
|
||||||
*
|
*
|
||||||
|
@ -97,31 +165,31 @@ public class DisposeTaskController {
|
||||||
|
|
||||||
// 构造处置任务参数
|
// 构造处置任务参数
|
||||||
DisposeTask task = DisposeTask.builder()
|
DisposeTask task = DisposeTask.builder()
|
||||||
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
|
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
|
||||||
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
|
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
|
||||||
.get(0)))
|
.get(0)))
|
||||||
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
|
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
|
||||||
req.getType()))
|
req.getType()))
|
||||||
.disposeObject(Helper.ipAddressNormalize(req.getDisposeIp()))
|
.disposeObject(Helper.ipAddressNormalize(req.getDisposeIp()))
|
||||||
.objectType(DisposeObjectType.IP)
|
.objectType(DisposeObjectType.IP)
|
||||||
.planEndTime(String.valueOf(req.getDisposeTime()))
|
.planEndTime(String.valueOf(req.getDisposeTime()))
|
||||||
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
|
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
|
||||||
Optional.ofNullable(req.getFlowDirection())
|
Optional.ofNullable(req.getFlowDirection())
|
||||||
.orElse(2)))
|
.orElse(2)))
|
||||||
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
|
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
|
||||||
Optional.ofNullable(req.getAttackType())
|
Optional.ofNullable(req.getAttackType())
|
||||||
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
|
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
|
||||||
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
|
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
|
||||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
|
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// 创建处置任务
|
// 创建处置任务
|
||||||
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
||||||
|
|
||||||
// 设置返回消息
|
// 设置返回消息
|
||||||
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
||||||
.disposeIp(task.getDisposeObject())
|
.disposeIp(task.getDisposeObject())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
rspInfo.setStatus(ret.getFirstParam().getCode());
|
rspInfo.setStatus(ret.getFirstParam().getCode());
|
||||||
rspInfo.setMessage(new String[]{ret.getFirstParam().getMsg()});
|
rspInfo.setMessage(new String[]{ret.getFirstParam().getMsg()});
|
||||||
|
@ -161,39 +229,39 @@ public class DisposeTaskController {
|
||||||
NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class,
|
NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class,
|
||||||
Optional.ofNullable(req.getFlowDirection()).orElse(2));
|
Optional.ofNullable(req.getFlowDirection()).orElse(2));
|
||||||
Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType())
|
Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType())
|
||||||
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
|
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
|
||||||
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
|
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
|
||||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
|
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
|
||||||
|
|
||||||
TaskStartMulRsp mulRsp = TaskStartMulRsp.builder()
|
TaskStartMulRsp mulRsp = TaskStartMulRsp.builder()
|
||||||
.items(new ArrayList<>())
|
.items(new ArrayList<>())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
for (String ip : req.getMulDisposeIp()) {
|
for (String ip : req.getMulDisposeIp()) {
|
||||||
// 构造处置任务参数
|
// 构造处置任务参数
|
||||||
DisposeTask task = DisposeTask.builder()
|
DisposeTask task = DisposeTask.builder()
|
||||||
.deviceId(devId)
|
.deviceId(devId)
|
||||||
.accountId(aId)
|
.accountId(aId)
|
||||||
.disposeCapacity(capType)
|
.disposeCapacity(capType)
|
||||||
.disposeObject(Helper.ipAddressNormalize(ip))
|
.disposeObject(Helper.ipAddressNormalize(ip))
|
||||||
.objectType(DisposeObjectType.IP)
|
.objectType(DisposeObjectType.IP)
|
||||||
.planEndTime(endTime)
|
.planEndTime(endTime)
|
||||||
.flowDirection(netDir)
|
.flowDirection(netDir)
|
||||||
.attackType(attackType)
|
.attackType(attackType)
|
||||||
.flowBandWidth(flowBand)
|
.flowBandWidth(flowBand)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// 创建处置任务
|
// 创建处置任务
|
||||||
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
||||||
|
|
||||||
// 设置返回消息
|
// 设置返回消息
|
||||||
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
||||||
.disposeIp(ip)
|
.disposeIp(ip)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// 启动任务成功
|
// 启动任务成功
|
||||||
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
|
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
|
||||||
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
|
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
|
||||||
rspInfo.setTaskId(ret.getSecondParam().getId().toString());
|
rspInfo.setTaskId(ret.getSecondParam().getId().toString());
|
||||||
rspInfo.setExpireTime(ret.getSecondParam().getPlanEndTime());
|
rspInfo.setExpireTime(ret.getSecondParam().getPlanEndTime());
|
||||||
}
|
}
|
||||||
|
@ -234,13 +302,13 @@ public class DisposeTaskController {
|
||||||
// 停止成功
|
// 停止成功
|
||||||
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
|
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
|
||||||
rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream()
|
rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream()
|
||||||
.map(DeviceTask::getDeviceId)
|
.map(DeviceTask::getDeviceId)
|
||||||
.map(String::valueOf)
|
.map(String::valueOf)
|
||||||
.toArray(String[]::new));
|
.toArray(String[]::new));
|
||||||
rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue());
|
rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue());
|
||||||
rspInfo.setDisposeIp(ret.getSecondParam().getDisposeObject());
|
rspInfo.setDisposeIp(ret.getSecondParam().getDisposeObject());
|
||||||
rspInfo.setLeftTime(String.valueOf(Math.abs(
|
rspInfo.setLeftTime(String.valueOf(Math.abs(
|
||||||
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
|
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
|
||||||
}
|
}
|
||||||
|
|
||||||
rspInfo.setTaskId(tId);
|
rspInfo.setTaskId(tId);
|
||||||
|
@ -263,27 +331,27 @@ public class DisposeTaskController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@ApiOperation("获取处置任务")
|
@ApiOperation("获取处置任务")
|
||||||
public ProtocolRespDTO<GetTaskRsp> getAllDisposeTask(
|
public ProtocolRespDTO<GetTaskRsp> getAllDisposeTask(
|
||||||
@Validated(ValidGroups.ProtocolCommonValid.class)
|
@Validated(ValidGroups.ProtocolCommonValid.class)
|
||||||
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
|
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
|
||||||
) {
|
) {
|
||||||
GetTaskRsp rspInfo = GetTaskRsp.builder().build();
|
GetTaskRsp rspInfo = GetTaskRsp.builder().build();
|
||||||
List<GetTaskDetail> getTaskDetail = new ArrayList<>();
|
List<GetTaskDetail> getTaskDetail = new ArrayList<>();
|
||||||
|
|
||||||
//获取TaskId列表
|
//获取TaskId列表
|
||||||
List<Long> reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId())
|
List<Long> reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId())
|
||||||
.orElse(new String[]{})).
|
.orElse(new String[]{})).
|
||||||
map(Long::parseLong).collect(Collectors.toList());
|
map(Long::parseLong).collect(Collectors.toList());
|
||||||
|
|
||||||
//获取所有可用处置任务
|
//获取所有可用处置任务
|
||||||
List<DisposeTask> taskList = disposeTaskService.getAllDisposeTask();
|
List<DisposeTask> taskList = disposeTaskService.getAllDisposeTask();
|
||||||
List<Long> idArray = taskList.stream().filter(v -> reqTaskIds.size() == 0 || reqTaskIds.contains(v.getId()))
|
List<Long> idArray = taskList.stream().filter(v -> reqTaskIds.size() == 0 || reqTaskIds.contains(v.getId()))
|
||||||
.map(DisposeTask::getId).collect(Collectors.toList());
|
.map(DisposeTask::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
if (idArray.size() > 0) {
|
if (idArray.size() > 0) {
|
||||||
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> ret =
|
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> ret =
|
||||||
disposeTaskService.getPageDisposeTask(idArray,
|
disposeTaskService.getPageDisposeTask(idArray,
|
||||||
mr.getMsgContent().getStartPage(),
|
mr.getMsgContent().getStartPage(),
|
||||||
mr.getMsgContent().getPageSize());
|
mr.getMsgContent().getPageSize());
|
||||||
|
|
||||||
// 分页信息
|
// 分页信息
|
||||||
rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
|
rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
|
||||||
|
@ -293,29 +361,29 @@ public class DisposeTaskController {
|
||||||
|
|
||||||
ret.getSecondParam().forEach(v -> {
|
ret.getSecondParam().forEach(v -> {
|
||||||
GetTaskDetail taskDetail = GetTaskDetail.builder()
|
GetTaskDetail taskDetail = GetTaskDetail.builder()
|
||||||
.taskId(String.valueOf(v.getId()))
|
.taskId(String.valueOf(v.getId()))
|
||||||
.accountId(String.valueOf(v.getAccountId()))
|
.accountId(String.valueOf(v.getAccountId()))
|
||||||
.disposeCapacity(v.getDisposeCapacity().getValue())
|
.disposeCapacity(v.getDisposeCapacity().getValue())
|
||||||
.disposeIp(v.getDisposeObject())
|
.disposeIp(v.getDisposeObject())
|
||||||
.createTime(v.getCreateTime())
|
.createTime(v.getCreateTime())
|
||||||
.planEndTime(v.getPlanEndTime())
|
.planEndTime(v.getPlanEndTime())
|
||||||
.endTime(v.getEndTime())
|
.endTime(v.getEndTime())
|
||||||
.flowDirection(v.getFlowDirection().getValue())
|
.flowDirection(v.getFlowDirection().getValue())
|
||||||
.attackType(v.getAttackType().toString())
|
.attackType(v.getAttackType().toString())
|
||||||
.flowBandWidth(v.getFlowBandWidth())
|
.flowBandWidth(v.getFlowBandWidth())
|
||||||
.currentStatus(v.getCurrentStatus().getValue())
|
.currentStatus(v.getCurrentStatus().getValue())
|
||||||
.deviceTask(new ArrayList<>())
|
.deviceTask(new ArrayList<>())
|
||||||
.build();
|
.build();
|
||||||
taskDetail.setStatus(ErrorCode.ERR_OK.getCode());
|
taskDetail.setStatus(ErrorCode.ERR_OK.getCode());
|
||||||
taskDetail.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
|
taskDetail.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
|
||||||
|
|
||||||
v.getDeviceTask().forEach(k -> {
|
v.getDeviceTask().forEach(k -> {
|
||||||
GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
|
GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
|
||||||
.devTaskId(String.valueOf(k.getId()))
|
.devTaskId(String.valueOf(k.getId()))
|
||||||
.devId(String.valueOf(k.getDeviceId()))
|
.devId(String.valueOf(k.getDeviceId()))
|
||||||
.externId(String.valueOf(k.getExternId()))
|
.externId(String.valueOf(k.getExternId()))
|
||||||
.status(k.getStatus())
|
.status(k.getStatus())
|
||||||
.build();
|
.build();
|
||||||
taskDetail.getDeviceTask().add(deviceTaskDetail);
|
taskDetail.getDeviceTask().add(deviceTaskDetail);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -326,19 +394,19 @@ public class DisposeTaskController {
|
||||||
// 设置不存在taskId的错误码
|
// 设置不存在taskId的错误码
|
||||||
if (reqTaskIds.stream().anyMatch(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))) {
|
if (reqTaskIds.stream().anyMatch(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))) {
|
||||||
reqTaskIds.stream()
|
reqTaskIds.stream()
|
||||||
.filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
|
.filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
|
||||||
.forEach(v -> {
|
.forEach(v -> {
|
||||||
GetTaskDetail td = GetTaskDetail.builder().build();
|
GetTaskDetail td = GetTaskDetail.builder().build();
|
||||||
td.setTaskId(String.valueOf(v));
|
td.setTaskId(String.valueOf(v));
|
||||||
td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
|
td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
|
||||||
td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
|
td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
|
||||||
getTaskDetail.add(td);
|
getTaskDetail.add(td);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 对返回的信息按照TaskID排序
|
// 对返回的信息按照TaskID排序
|
||||||
rspInfo.setItems(getTaskDetail.stream().sorted(Comparator.comparing(GetTaskDetail::getTaskId))
|
rspInfo.setItems(getTaskDetail.stream().sorted(Comparator.comparing(GetTaskDetail::getTaskId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
|
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.dispose.pojo.dto.protocol.task;
|
||||||
|
|
||||||
|
import com.dispose.common.DisposeObjectType;
|
||||||
|
import com.dispose.validation.group.ValidGroups;
|
||||||
|
import com.dispose.validation.valids.ValidBaseEnum;
|
||||||
|
import com.dispose.validation.valids.ValidDisposeObject;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.GroupSequence;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Dispose object.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
@ValidDisposeObject(groups = ValidGroups.TaskStartReqValid.class)
|
||||||
|
@GroupSequence({ValidGroups.TaskStartReqValid.class, DisposeObject.class})
|
||||||
|
public class DisposeObject {
|
||||||
|
/**
|
||||||
|
* The Dispose object.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "disposeObject 处置对象不能为空", groups = ValidGroups.TaskStartReqValid.class)
|
||||||
|
private String disposeObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Object type.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "objectType 处置类型不能为空", groups = ValidGroups.TaskStartReqValid.class)
|
||||||
|
@ValidBaseEnum(enumClass = DisposeObjectType.class, groups = ValidGroups.TaskStartReqValid.class)
|
||||||
|
private Integer objectType;
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.dispose.pojo.dto.protocol.task;
|
||||||
|
|
||||||
|
import com.dispose.common.DDoSAttackType;
|
||||||
|
import com.dispose.common.DisposeCapacityType;
|
||||||
|
import com.dispose.common.NetflowDirection;
|
||||||
|
import com.dispose.validation.group.ValidGroups;
|
||||||
|
import com.dispose.validation.valids.ValidBaseEnum;
|
||||||
|
import com.dispose.validation.valids.ValidBaseEnumArray;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Dispose task start req.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
public class DisposeTaskStartReq {
|
||||||
|
/**
|
||||||
|
* The Device id.
|
||||||
|
*/
|
||||||
|
private String deviceId;
|
||||||
|
/**
|
||||||
|
* The Type.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "type 处置类型不能为空", groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
@ValidBaseEnum(enumClass = DisposeCapacityType.class, groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Dispose objects.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "disposeObjects 处置对象不能为空", groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
@Size(min = 1, message = "disposeObjects 至少需要有一个元素", groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
@Valid
|
||||||
|
private DisposeObject[] disposeObjects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Dispose time.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "disposeTime 处置时间不能为空", groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
private Integer disposeTime;
|
||||||
|
/**
|
||||||
|
* The Flow direction.
|
||||||
|
*/
|
||||||
|
@ValidBaseEnum(enumClass = NetflowDirection.class, groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
private Integer flowDirection;
|
||||||
|
/**
|
||||||
|
* The Attack type.
|
||||||
|
*/
|
||||||
|
@ValidBaseEnumArray(enumClass = DDoSAttackType.class, groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
@Size(min = 1, message = "attackType 必须指定最少一种攻击类型", groups = ValidGroups.TaskStartReqCommonValid.class)
|
||||||
|
private Integer[] attackType;
|
||||||
|
/**
|
||||||
|
* The Flow bandwidth.
|
||||||
|
*/
|
||||||
|
private Integer flowBandwidth;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.dispose.pojo.dto.protocol.task;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Dispose task start rsp.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
public class DisposeTaskStartRsp {
|
||||||
|
/**
|
||||||
|
* The Items.
|
||||||
|
*/
|
||||||
|
List<TaskStartInfo> items;
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.dispose.pojo.dto.protocol.task;
|
||||||
|
|
||||||
|
import com.dispose.pojo.dto.protocol.base.BaseIdResp;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Dispose task start rsp.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@JsonPropertyOrder({"taskId", "disposeObject", "objectType", "expireTime", "status", "message"})
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
|
||||||
|
public class TaskStartInfo extends BaseIdResp {
|
||||||
|
/**
|
||||||
|
* The Dispose ip.
|
||||||
|
*/
|
||||||
|
private String disposeObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Object type.
|
||||||
|
*/
|
||||||
|
private Integer objectType;
|
||||||
|
/**
|
||||||
|
* The Expire time.
|
||||||
|
*/
|
||||||
|
private String expireTime;
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.dispose.validation.valids;
|
||||||
|
|
||||||
|
import com.dispose.validation.valids.impl.ValidDisposeObjectImpl;
|
||||||
|
|
||||||
|
import javax.validation.Constraint;
|
||||||
|
import javax.validation.Payload;
|
||||||
|
import java.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface Valid dispose object.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
@Constraint(validatedBy = {ValidDisposeObjectImpl.class})
|
||||||
|
public @interface ValidDisposeObject {
|
||||||
|
/**
|
||||||
|
* Message string.
|
||||||
|
*
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
String message() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Groups class [ ].
|
||||||
|
*
|
||||||
|
* @return the class [ ]
|
||||||
|
*/
|
||||||
|
Class<?>[] groups() default {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Payload class [ ].
|
||||||
|
*
|
||||||
|
* @return the class [ ]
|
||||||
|
*/
|
||||||
|
Class<? extends Payload>[] payload() default {};
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.dispose.validation.valids.impl;
|
||||||
|
|
||||||
|
import com.dispose.common.ConstValue;
|
||||||
|
import com.dispose.common.DisposeObjectType;
|
||||||
|
import com.dispose.pojo.dto.protocol.task.DisposeObject;
|
||||||
|
import com.dispose.validation.valids.ValidDisposeObject;
|
||||||
|
|
||||||
|
import javax.validation.ConstraintValidator;
|
||||||
|
import javax.validation.ConstraintValidatorContext;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type Valid dispose object.
|
||||||
|
*
|
||||||
|
* @author <huangxin@cmhi.chinamoblie.com>
|
||||||
|
*/
|
||||||
|
public class ValidDisposeObjectImpl implements ConstraintValidator<ValidDisposeObject, DisposeObject> {
|
||||||
|
/**
|
||||||
|
* The Message.
|
||||||
|
*/
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize.
|
||||||
|
*
|
||||||
|
* @param constraintAnnotation the constraint annotation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize(ValidDisposeObject constraintAnnotation) {
|
||||||
|
this.message = constraintAnnotation.message();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is valid boolean.
|
||||||
|
*
|
||||||
|
* @param disposeObject the dispose object
|
||||||
|
* @param ctx the ctx
|
||||||
|
* @return the boolean
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isValid(DisposeObject disposeObject, ConstraintValidatorContext ctx) {
|
||||||
|
boolean ret = true;
|
||||||
|
|
||||||
|
if (disposeObject == null || disposeObject.getDisposeObject() == null || disposeObject.getObjectType() == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(disposeObject.getDisposeObject().length() == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> errMsg = new ArrayList<>();
|
||||||
|
|
||||||
|
// 对 IP 地址进行验证
|
||||||
|
if ((disposeObject.getObjectType() & DisposeObjectType.IP.getValue()) != 0) {
|
||||||
|
if (!Pattern.matches(ConstValue.ipAddrSegmentReg(), disposeObject.getDisposeObject())) {
|
||||||
|
errMsg.add("字段 disposeObject 包含非法值: " + disposeObject.getDisposeObject());
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新设置消息
|
||||||
|
ctx.disableDefaultConstraintViolation();
|
||||||
|
ctx.buildConstraintViolationWithTemplate(this.message + " " + errMsg.toString()).addConstraintViolation();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue