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.
|
||||||
*
|
*
|
||||||
|
|
|
@ -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