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.ProtocolRespDTO;
|
||||
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.GetTaskDetail;
|
||||
import com.dispose.pojo.dto.protocol.task.GetTaskRsp;
|
||||
import com.dispose.pojo.dto.protocol.task.IpTaskStartReq;
|
||||
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.TaskStopItem;
|
||||
import com.dispose.pojo.dto.protocol.task.TaskStopRsp;
|
||||
|
@ -80,6 +84,70 @@ public class DisposeTaskController {
|
|||
@Resource
|
||||
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.
|
||||
*
|
||||
|
@ -97,31 +165,31 @@ public class DisposeTaskController {
|
|||
|
||||
// 构造处置任务参数
|
||||
DisposeTask task = DisposeTask.builder()
|
||||
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
|
||||
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
|
||||
.get(0)))
|
||||
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
|
||||
req.getType()))
|
||||
.disposeObject(Helper.ipAddressNormalize(req.getDisposeIp()))
|
||||
.objectType(DisposeObjectType.IP)
|
||||
.planEndTime(String.valueOf(req.getDisposeTime()))
|
||||
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
|
||||
Optional.ofNullable(req.getFlowDirection())
|
||||
.orElse(2)))
|
||||
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
|
||||
Optional.ofNullable(req.getAttackType())
|
||||
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
|
||||
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
|
||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
|
||||
.build();
|
||||
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
|
||||
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
|
||||
.get(0)))
|
||||
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
|
||||
req.getType()))
|
||||
.disposeObject(Helper.ipAddressNormalize(req.getDisposeIp()))
|
||||
.objectType(DisposeObjectType.IP)
|
||||
.planEndTime(String.valueOf(req.getDisposeTime()))
|
||||
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
|
||||
Optional.ofNullable(req.getFlowDirection())
|
||||
.orElse(2)))
|
||||
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
|
||||
Optional.ofNullable(req.getAttackType())
|
||||
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
|
||||
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
|
||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
|
||||
.build();
|
||||
|
||||
// 创建处置任务
|
||||
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
||||
|
||||
// 设置返回消息
|
||||
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
||||
.disposeIp(task.getDisposeObject())
|
||||
.build();
|
||||
.disposeIp(task.getDisposeObject())
|
||||
.build();
|
||||
|
||||
rspInfo.setStatus(ret.getFirstParam().getCode());
|
||||
rspInfo.setMessage(new String[]{ret.getFirstParam().getMsg()});
|
||||
|
@ -161,39 +229,39 @@ public class DisposeTaskController {
|
|||
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()}));
|
||||
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
|
||||
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
|
||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
|
||||
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
|
||||
|
||||
TaskStartMulRsp mulRsp = TaskStartMulRsp.builder()
|
||||
.items(new ArrayList<>())
|
||||
.build();
|
||||
.items(new ArrayList<>())
|
||||
.build();
|
||||
|
||||
for (String ip : req.getMulDisposeIp()) {
|
||||
// 构造处置任务参数
|
||||
DisposeTask task = DisposeTask.builder()
|
||||
.deviceId(devId)
|
||||
.accountId(aId)
|
||||
.disposeCapacity(capType)
|
||||
.disposeObject(Helper.ipAddressNormalize(ip))
|
||||
.objectType(DisposeObjectType.IP)
|
||||
.planEndTime(endTime)
|
||||
.flowDirection(netDir)
|
||||
.attackType(attackType)
|
||||
.flowBandWidth(flowBand)
|
||||
.build();
|
||||
.deviceId(devId)
|
||||
.accountId(aId)
|
||||
.disposeCapacity(capType)
|
||||
.disposeObject(Helper.ipAddressNormalize(ip))
|
||||
.objectType(DisposeObjectType.IP)
|
||||
.planEndTime(endTime)
|
||||
.flowDirection(netDir)
|
||||
.attackType(attackType)
|
||||
.flowBandWidth(flowBand)
|
||||
.build();
|
||||
|
||||
// 创建处置任务
|
||||
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
|
||||
|
||||
// 设置返回消息
|
||||
IpTaskStartRsp rspInfo = IpTaskStartRsp.builder()
|
||||
.disposeIp(ip)
|
||||
.build();
|
||||
.disposeIp(ip)
|
||||
.build();
|
||||
|
||||
// 启动任务成功
|
||||
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
|
||||
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
|
||||
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
|
||||
rspInfo.setTaskId(ret.getSecondParam().getId().toString());
|
||||
rspInfo.setExpireTime(ret.getSecondParam().getPlanEndTime());
|
||||
}
|
||||
|
@ -234,13 +302,13 @@ public class DisposeTaskController {
|
|||
// 停止成功
|
||||
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
|
||||
rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream()
|
||||
.map(DeviceTask::getDeviceId)
|
||||
.map(String::valueOf)
|
||||
.toArray(String[]::new));
|
||||
.map(DeviceTask::getDeviceId)
|
||||
.map(String::valueOf)
|
||||
.toArray(String[]::new));
|
||||
rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue());
|
||||
rspInfo.setDisposeIp(ret.getSecondParam().getDisposeObject());
|
||||
rspInfo.setLeftTime(String.valueOf(Math.abs(
|
||||
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
|
||||
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
|
||||
}
|
||||
|
||||
rspInfo.setTaskId(tId);
|
||||
|
@ -263,27 +331,27 @@ public class DisposeTaskController {
|
|||
@ResponseBody
|
||||
@ApiOperation("获取处置任务")
|
||||
public ProtocolRespDTO<GetTaskRsp> getAllDisposeTask(
|
||||
@Validated(ValidGroups.ProtocolCommonValid.class)
|
||||
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
|
||||
@Validated(ValidGroups.ProtocolCommonValid.class)
|
||||
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
|
||||
) {
|
||||
GetTaskRsp rspInfo = GetTaskRsp.builder().build();
|
||||
List<GetTaskDetail> getTaskDetail = new ArrayList<>();
|
||||
|
||||
//获取TaskId列表
|
||||
List<Long> reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId())
|
||||
.orElse(new String[]{})).
|
||||
map(Long::parseLong).collect(Collectors.toList());
|
||||
.orElse(new String[]{})).
|
||||
map(Long::parseLong).collect(Collectors.toList());
|
||||
|
||||
//获取所有可用处置任务
|
||||
List<DisposeTask> taskList = disposeTaskService.getAllDisposeTask();
|
||||
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) {
|
||||
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> ret =
|
||||
disposeTaskService.getPageDisposeTask(idArray,
|
||||
mr.getMsgContent().getStartPage(),
|
||||
mr.getMsgContent().getPageSize());
|
||||
disposeTaskService.getPageDisposeTask(idArray,
|
||||
mr.getMsgContent().getStartPage(),
|
||||
mr.getMsgContent().getPageSize());
|
||||
|
||||
// 分页信息
|
||||
rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
|
||||
|
@ -293,29 +361,29 @@ public class DisposeTaskController {
|
|||
|
||||
ret.getSecondParam().forEach(v -> {
|
||||
GetTaskDetail taskDetail = GetTaskDetail.builder()
|
||||
.taskId(String.valueOf(v.getId()))
|
||||
.accountId(String.valueOf(v.getAccountId()))
|
||||
.disposeCapacity(v.getDisposeCapacity().getValue())
|
||||
.disposeIp(v.getDisposeObject())
|
||||
.createTime(v.getCreateTime())
|
||||
.planEndTime(v.getPlanEndTime())
|
||||
.endTime(v.getEndTime())
|
||||
.flowDirection(v.getFlowDirection().getValue())
|
||||
.attackType(v.getAttackType().toString())
|
||||
.flowBandWidth(v.getFlowBandWidth())
|
||||
.currentStatus(v.getCurrentStatus().getValue())
|
||||
.deviceTask(new ArrayList<>())
|
||||
.build();
|
||||
.taskId(String.valueOf(v.getId()))
|
||||
.accountId(String.valueOf(v.getAccountId()))
|
||||
.disposeCapacity(v.getDisposeCapacity().getValue())
|
||||
.disposeIp(v.getDisposeObject())
|
||||
.createTime(v.getCreateTime())
|
||||
.planEndTime(v.getPlanEndTime())
|
||||
.endTime(v.getEndTime())
|
||||
.flowDirection(v.getFlowDirection().getValue())
|
||||
.attackType(v.getAttackType().toString())
|
||||
.flowBandWidth(v.getFlowBandWidth())
|
||||
.currentStatus(v.getCurrentStatus().getValue())
|
||||
.deviceTask(new ArrayList<>())
|
||||
.build();
|
||||
taskDetail.setStatus(ErrorCode.ERR_OK.getCode());
|
||||
taskDetail.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
|
||||
|
||||
v.getDeviceTask().forEach(k -> {
|
||||
GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
|
||||
.devTaskId(String.valueOf(k.getId()))
|
||||
.devId(String.valueOf(k.getDeviceId()))
|
||||
.externId(String.valueOf(k.getExternId()))
|
||||
.status(k.getStatus())
|
||||
.build();
|
||||
.devTaskId(String.valueOf(k.getId()))
|
||||
.devId(String.valueOf(k.getDeviceId()))
|
||||
.externId(String.valueOf(k.getExternId()))
|
||||
.status(k.getStatus())
|
||||
.build();
|
||||
taskDetail.getDeviceTask().add(deviceTaskDetail);
|
||||
});
|
||||
|
||||
|
@ -326,19 +394,19 @@ public class DisposeTaskController {
|
|||
// 设置不存在taskId的错误码
|
||||
if (reqTaskIds.stream().anyMatch(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))) {
|
||||
reqTaskIds.stream()
|
||||
.filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
|
||||
.forEach(v -> {
|
||||
GetTaskDetail td = GetTaskDetail.builder().build();
|
||||
td.setTaskId(String.valueOf(v));
|
||||
td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
|
||||
td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
|
||||
getTaskDetail.add(td);
|
||||
});
|
||||
.filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
|
||||
.forEach(v -> {
|
||||
GetTaskDetail td = GetTaskDetail.builder().build();
|
||||
td.setTaskId(String.valueOf(v));
|
||||
td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
|
||||
td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
|
||||
getTaskDetail.add(td);
|
||||
});
|
||||
}
|
||||
|
||||
// 对返回的信息按照TaskID排序
|
||||
rspInfo.setItems(getTaskDetail.stream().sorted(Comparator.comparing(GetTaskDetail::getTaskId))
|
||||
.collect(Collectors.toList()));
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
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