REM:
1. 增加迪普防护对象获取功能
This commit is contained in:
HuangXin 2021-01-14 09:58:15 +08:00
parent ef48a292f5
commit 7bc5f2ef1a
5 changed files with 172 additions and 38 deletions

View File

@ -30,9 +30,7 @@ import org.apache.wss4j.dom.handler.WSHandlerConstants;
import javax.xml.ws.BindingProvider; import javax.xml.ws.BindingProvider;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -51,10 +49,6 @@ public class DpTechAbilityImpl implements DisposeAbility {
* The Protect ip v 6. * The Protect ip v 6.
*/ */
private final List<String> protectIpV6 = new ArrayList<>(); private final List<String> protectIpV6 = new ArrayList<>();
/**
* The All cleanup devices.
*/
private final HashSet<String> allCleanupDevices = new HashSet<>();
/** /**
* The Timer cnt. * The Timer cnt.
*/ */
@ -69,36 +63,14 @@ public class DpTechAbilityImpl implements DisposeAbility {
private AbnormalFlowCleaningServicePortType cleanTypePort; private AbnormalFlowCleaningServicePortType cleanTypePort;
/** /**
* Init cleanup devices. * Gets clean type port.
*
* @return the clean type port
*/ */
private void initCleanupDevices() { public AbnormalFlowCleaningServicePortType getCleanTypePort() {
try { return cleanTypePort;
log.info("++++Begging DPTech Get All Detect Devices");
String dev = cleanTypePort.getAllProtectDevices();
log.info("----Finish DPTech Get All Detect Devices: {}", dev);
Collections.addAll(allCleanupDevices, dev.split(DisposeConfigValue.SPLIT_CHAR));
} catch (Exception ex) {
log.error("----Exception DPTech Get All Detect Devices");
}
} }
/**
* Init protection objects.
*/
private void initProtectionObjects() {
try {
log.info("++++Begging DPTech Get All Protection Objects");
ArrayOfProtectionObjectDataForService ret = cleanTypePort.getAllProtectionObjectFromUMC();
String dev = cleanTypePort.getAllProtectDevices();
log.info("----Finish DPTech Get All Protection Objects: {}", dev);
Collections.addAll(allCleanupDevices, dev.split(DisposeConfigValue.SPLIT_CHAR));
} catch (Exception ex) {
log.error("----Exception DPTech Get All Protection Objects");
}
}
/** /**
* Init device env. * Init device env.
@ -139,9 +111,6 @@ public class DpTechAbilityImpl implements DisposeAbility {
//读取超时 //读取超时
policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND); policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND);
conduit.setClient(policy); conduit.setClient(policy);
// 获取所有检测设备
initCleanupDevices();
} }
/** /**

View File

@ -1,17 +1,151 @@
package com.dispose.ability.impl; package com.dispose.ability.impl;
import com.dispose.common.DisposeConfigValue;
import com.dispose.common.DpTechConfigValue;
import com.dispose.common.IpAddrType;
import com.dispose.pojo.dto.protocol.device.ability.DpProtectObject;
import com.dptech.dispose.ArrayOfProtectionObjectDataForService;
import com.dptech.dispose.NtcRequestResultInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
/** /**
* The type Dp tech bypass ability. * The type Dp tech bypass ability.
* *
* @author <huangxin@cmhi.chinamoblie.com> * @author <huangxin@cmhi.chinamoblie.com>
*/ */
@Slf4j
public class DpTechBypassAbilityImpl extends DpTechAbilityImpl { public class DpTechBypassAbilityImpl extends DpTechAbilityImpl {
/**
* The Obj prefix.
*/
private final String OBJ_PREFIX = "CMHI";
/**
* The All cleanup devices.
*/
private final HashSet<String> allCleanupDevices = new HashSet<>();
/**
* The Umc object.
*/
private final Hashtable<String, DpProtectObject> umcObject = new Hashtable<>();
/**
* The Timer cnt.
*/
private long timerCnt = 0;
/**
* Init cleanup devices.
*/
private void initCleanupDevices() {
try {
log.info("++++Begging DPTech Get All Protection Devices");
String dev = getCleanTypePort().getAllProtectDevices();
log.info("----Finish DPTech Get All Protection Devices: {}", dev);
Collections.addAll(allCleanupDevices, dev.split(DisposeConfigValue.SPLIT_CHAR));
} catch (Exception ex) {
log.error("----Exception DPTech Get All Protection Devices: {}", ex.getMessage());
}
}
/**
* Init device env.
*
* @param urlPath the url path
* @param username the username
* @param password the password
*/
@Override
public void initDeviceEnv(String urlPath, String username, String password) {
super.initDeviceEnv(urlPath, username, password);
// 获取所有检测设备
initCleanupDevices();
}
/**
* Gets dispose device protect object.
* 防护对象命名规则 前缀_对象唯一名称_IP地址类型
* CMHI_xxxx_V4
* CMHI_XXXX_V6
*/
@Override
public void getDisposeDeviceProtectObject() {
try {
log.info("++++Begging DPTech Get All Protection Objects");
ArrayOfProtectionObjectDataForService ret = getCleanTypePort().getAllProtectionObjectFromUMC();
if (ret == null) {
log.error("----Finish DPTech Get All Protection Objects error");
return;
}
ret.getProtectionObjectDataForService().forEach(k -> {
String objName = k.getProtectionName().getValue();
// 删除非法的防护对象
if (!objName.startsWith(OBJ_PREFIX)) {
log.error("!!!!Found Unexpect Protection Object [{}, {}], Deleted it.",
objName,
k.getIpSegment().getValue());
NtcRequestResultInfo rsp = getCleanTypePort().deleteProtectionObjectForUMC(objName);
if (rsp.getResultRetVal() == 0) {
log.warn("!!!!Remove Protection Object {} Succeed", objName);
} else {
log.error("!!!!Remove Protection Object {} Error: {}", objName, rsp.getResultInfo().getValue());
}
} else {
// 缓存所有防护对象
DpProtectObject obj = DpProtectObject.builder()
.cleanupDevices(k.getCleaningDevices().getValue())
.protectName(objName)
.detectionDevices(k.getDetectionDevices().getValue())
.ipType(k.getIpType() == 0 ? IpAddrType.IPV4 : IpAddrType.IPV6)
.ipSegment(new Hashtable<>())
.build();
String ipSeg = k.getIpSegment().getValue();
log.debug("DpTech response type: {}, value: {}", k.getIpType(), ipSeg);
// 分割IP段
Arrays.stream(StringUtils.deleteWhitespace(ipSeg).split(",")).forEach(v -> {
String ipValue = v.replaceAll("\\d+_", "");
String key = v.replace(ipValue, "").replace("_", "");
// 添加到缓存
obj.getIpSegment().put(key, ipValue);
});
// 添加到缓存
umcObject.put(objName, obj);
}
});
log.info("----Finish DPTech Get All Protection Objects: {}", ret.getProtectionObjectDataForService()
.size());
} catch (Exception ex) {
log.error("----Exception DPTech Get All Protection Objects: {}", ex.getMessage());
}
}
/** /**
* Period task runtime. * Period task runtime.
*/ */
@Override @Override
public void periodTaskRuntime() { public void periodTaskRuntime() {
synchronized (this) {
super.periodTaskRuntime(); super.periodTaskRuntime();
if (timerCnt++ % DpTechConfigValue.PROTECTION_UPGRADE_PERIOD == 0) {
// 定时检测防护对象
getDisposeDeviceProtectObject();
}
}
} }
} }

View File

@ -21,4 +21,9 @@ public class DpTechConfigValue {
* The constant SOAP_RECEIVE_TIMEOUT_SECOND. * The constant SOAP_RECEIVE_TIMEOUT_SECOND.
*/ */
public static volatile long SOAP_RECEIVE_TIMEOUT_SECOND = 60; public static volatile long SOAP_RECEIVE_TIMEOUT_SECOND = 60;
/**
* The Protection upgrade period.
*/
public static final long PROTECTION_UPGRADE_PERIOD = 10;
} }

View File

@ -1,6 +1,8 @@
package com.dispose.pojo.dto.protocol.device.ability; package com.dispose.pojo.dto.protocol.device.ability;
import com.dispose.common.IpAddrType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -14,6 +16,7 @@ import java.util.Hashtable;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder
public class DpProtectObject { public class DpProtectObject {
/** /**
* The Protect name. * The Protect name.
@ -31,7 +34,12 @@ public class DpProtectObject {
private String cleanupDevices; private String cleanupDevices;
/** /**
* The Ip segment v 4. * The Ip type.
*/
private IpAddrType ipType;
/**
* The Ip segment.
*/ */
private Hashtable<String, String> ipSegment; private Hashtable<String, String> ipSegment;
} }

View File

@ -607,4 +607,22 @@ public class demo {
@Test @Test
public void codeDebug() { public void codeDebug() {
} }
@Test
public void dpIpSegmentTest() {
String ipSegmentString = "1_192.168.10.1-192.168.10.12,2_192.168.1.2-192.168.1.20,3_-";
Arrays.stream(ipSegmentString.split(",")).forEach(
k -> {
String value = k.replaceAll("\\d+_", "");
String key = k.replace(value, "").replace("_", "");
if (Pattern.matches(ConstValue.ipAddrSegmentReg(), value)) {
log.info("Result: {}, {}", key, value);
} else {
log.error("Result: {}, {} error", key, value);
}
}
);
}
} }