From ce8e1469f94043b3afdf762f34cd258fd00edbd1 Mon Sep 17 00:00:00 2001 From: zhangwei Date: Mon, 26 Nov 2018 14:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E5=90=8C=E6=AD=A5=E9=85=8D=E7=BD=AE=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E9=80=BB=E8=BE=91=E4=BB=A5=E5=8F=8A=E4=B8=8B?= =?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nis/util/ConfigServiceUtil.java | 136 ++ .../nis/util/ServiceConfigTemplateUtil.java | 137 ++ .../nis/web/controller/BaseController.java | 3 + .../ConfigSynchronizationController.java | 69 + .../ConfigSynchronizationDao.java | 84 + .../ConfigSynchronizationDao.xml | 1357 +++++++++++++++++ .../ConfigSynchronizationService.java | 557 +++++++ src/main/resources/service/service_config.xml | 264 ++++ .../sql/20181124/add_sys_dict_of_Cfgsync | 13 + .../sql/20181124/alter_complex_keyword_cfg | 1 + 10 files changed, 2621 insertions(+) create mode 100644 src/main/java/com/nis/util/ServiceConfigTemplateUtil.java create mode 100644 src/main/java/com/nis/web/controller/configuration/ConfigSynchronizationController.java create mode 100644 src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.java create mode 100644 src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml create mode 100644 src/main/java/com/nis/web/service/configuration/ConfigSynchronizationService.java create mode 100644 src/main/resources/service/service_config.xml create mode 100644 src/main/resources/sql/20181124/add_sys_dict_of_Cfgsync create mode 100644 src/main/resources/sql/20181124/alter_complex_keyword_cfg diff --git a/src/main/java/com/nis/util/ConfigServiceUtil.java b/src/main/java/com/nis/util/ConfigServiceUtil.java index 797c3f713..dc088e561 100644 --- a/src/main/java/com/nis/util/ConfigServiceUtil.java +++ b/src/main/java/com/nis/util/ConfigServiceUtil.java @@ -624,6 +624,142 @@ public class ConfigServiceUtil { } return result; } + + /** + * 配置全量更新指令下发 + * @param params + * @return + * @throws MaatConvertException + */ + public static ToMaatResult configSyncCmd(String params) throws MaatConvertException{ + Response response=null; + ToMaatResult bean = null; + try { + String result = null; + String url = DictUtils.getDictLabel("config_sync_url", "sync_cmd"); + //创建连接 + WebTarget wt = ClientUtil.getWebTarger(url); + logger.info("sync_cmd url:"+url); + //获取响应结果 + Builder header = wt.request(MediaType.APPLICATION_JSON) + .header("Content-Type", MediaType.APPLICATION_JSON); + try { + response= header.post(Entity.entity(params, MediaType.APPLICATION_JSON)); + if(response != null) { + result=response.readEntity(String.class); + } + } catch (Exception e) { + throw new MaatConvertException(""); + } + if(response != null && response.getStatus() == 200){ + logger.info("get result success"); + JsonConfig config=new JsonConfig(); + JSONObject resObject = JSONObject.fromObject(result,config); + bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class); + }else{ + throw new MaatConvertException(":"+result); + } + } catch (Exception e) { + throw e; + }finally { + if (response != null) { + response.close(); + } + } + return bean; + } + /** + * 配置全量更新获取当前状态 + * @param params + * @return + * @throws MaatConvertException + */ + public static ToMaatResult configSyncStatus() throws MaatConvertException{ + Response response=null; + ToMaatResult bean = null; + try { + String result = null; + String url = DictUtils.getDictLabel("config_sync_url", "get_sync_status"); + //创建连接 + WebTarget wt = ClientUtil.getWebTarger(url); + logger.info("get_sync_status url:"+url); + //获取响应结果 + Builder header = wt.request(MediaType.APPLICATION_JSON) + .header("Content-Type", MediaType.APPLICATION_JSON); + try { + response= header.get(); + if(response != null) { + result=response.readEntity(String.class); + } + } catch (Exception e) { + throw new MaatConvertException(""); + } + if(response != null && response.getStatus() == 200){ + logger.info("get result success"); + JsonConfig config=new JsonConfig(); + JSONObject resObject = JSONObject.fromObject(result,config); + bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class); + }else{ + throw new MaatConvertException(":"+result); + } + } catch (Exception e) { + throw e; + }finally { + if (response != null) { + response.close(); + } + } + return bean; + } + /** + * 配置全量更新 + * @param params + * @return + * @throws MaatConvertException + */ + public static ToMaatResult configSync(String params,Integer cfgType,Integer serviceId,String tableName,String completeTag) throws MaatConvertException{ + Response response=null; + ToMaatResult bean = null; + try { + String result = null; + String url = DictUtils.getDictLabel("config_sync_url", "sync_send"); + //创建连接 + WebTarget wt = ClientUtil.getWebTarger(url); + logger.info("sync_send url:"+url); + //获取响应结果 + Builder header = wt.request(MediaType.APPLICATION_JSON) + .header("Content-Type", MediaType.APPLICATION_JSON) + .header("Config-Type", cfgType) + .header("Service-Id", serviceId) + .header("Config-Table", tableName) + .header("Last-Completed-Tag", completeTag); + try { + response= header.post(Entity.entity(params, MediaType.APPLICATION_JSON)); + if(response != null) { + result=response.readEntity(String.class); + } + } catch (Exception e) { + throw new MaatConvertException(""); + } + if(response != null && response.getStatus() == 200){ + logger.info("get result success"); + JsonConfig config=new JsonConfig(); + config.setExcludes(new String[]{"configCompileList"}); + JSONObject resObject = JSONObject.fromObject(result,config); + bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class); + }else{ + throw new MaatConvertException(":"+result); + } + } catch (Exception e) { + throw e; + }finally { + if (response != null) { + response.close(); + } + } + + return bean; + } public static void main(String[] args) { try { // getId(1,1); diff --git a/src/main/java/com/nis/util/ServiceConfigTemplateUtil.java b/src/main/java/com/nis/util/ServiceConfigTemplateUtil.java new file mode 100644 index 000000000..d400fb202 --- /dev/null +++ b/src/main/java/com/nis/util/ServiceConfigTemplateUtil.java @@ -0,0 +1,137 @@ +package com.nis.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.map.CaseInsensitiveMap; +import org.apache.log4j.Logger; +import org.dom4j.Attribute; +import org.dom4j.Element; +import org.dom4j.Node; +import org.dom4j.io.SAXReader; + +public class ServiceConfigTemplateUtil { + + private Logger logger = Logger.getLogger(getClass()); + + private Node root; + /** + * 配置文件内容 + * @return + */ + public ServiceConfigTemplateUtil(){ + SAXReader reader = new SAXReader(); + org.dom4j.Document document = null; + String configPath = "/service/service_config.xml"; + try { + document = reader.read(ServiceConfigTemplateUtil.class.getResourceAsStream(configPath)); + root = document.getRootElement(); + } catch (Exception e) { + logger.error(e.getMessage()); + e.printStackTrace(); + } + } + /** + * 获取业务节点列表 + * @return + */ + public List getServiceNodeList(){ + List nodes = root.selectNodes("service"); + return nodes; + } + /** + * 获取业务列表 + * @return + */ + public List> getServiceList(){ + List> list =new ArrayList(); + List elements = root.selectNodes("service"); + for(Element element:elements){ + Map map = new HashMap(); + for(int i=0;i> getServiceCfgList(Element serviceNode){ + List> list = new ArrayList(); + List elements = serviceNode.selectNodes("serviceCfg"); + for(Element element:elements){ + Map map = new HashMap(); + for(int i=0;i> getUserRegionList(Element serviceNode){ + List> list = new ArrayList(); + List elements = serviceNode.selectNodes("userRegion"); + for(Element element:elements){ + Map map = new HashMap(); + for(int i=0;i elements = root.selectNodes(tag); + for(Element element:elements){ + list.add(element.attributeValue(attribute)); + } + return list; + } + public static void main(String[] args) { + try { + ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil(); + List> list = serviceTemplate.getServiceList(); + for(Map map :list){ + System.out.println("业务配置:"+map.get("id")+","+map.get("functionId")+","+map.get("serviceType")+","+map.get("tableName")); + List> cfgList = (List>) map.get("cfgList"); + List> userRegionList = (List>) map.get("userRegionList"); + if(cfgList!=null){ + for(Map m:cfgList){ + System.out.println("cfgList:"+m.get("cfgType")+","+m.get("tableName")+","+m.get("groupReuse")+","+m.get("groupId")); + } + } + if(userRegionList!=null){ + for(Map n:userRegionList){ + System.out.println("userRegionList:"+n.get("regionKey")+","+n.get("regionColumn")+","+n.get("handleType")); + } + } + + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/nis/web/controller/BaseController.java b/src/main/java/com/nis/web/controller/BaseController.java index e29f9307c..76cc3074e 100644 --- a/src/main/java/com/nis/web/controller/BaseController.java +++ b/src/main/java/com/nis/web/controller/BaseController.java @@ -115,6 +115,7 @@ import com.nis.web.service.configuration.AvContentCfgService; import com.nis.web.service.configuration.BgpCfgService; import com.nis.web.service.configuration.CachePolicyService; import com.nis.web.service.configuration.ComplexStringCfgService; +import com.nis.web.service.configuration.ConfigSynchronizationService; import com.nis.web.service.configuration.ControlPolicyService; import com.nis.web.service.configuration.DdosCfgService; import com.nis.web.service.configuration.DnsIpCfgService; @@ -251,6 +252,8 @@ public class BaseController { //protected ConfigGroupInfoService configGroupInfoService; @Autowired protected CachePolicyService cachePolicyService; + @Autowired + protected ConfigSynchronizationService configSynchronizationService; /** * 管理基础路径 */ diff --git a/src/main/java/com/nis/web/controller/configuration/ConfigSynchronizationController.java b/src/main/java/com/nis/web/controller/configuration/ConfigSynchronizationController.java new file mode 100644 index 000000000..fb66b1f07 --- /dev/null +++ b/src/main/java/com/nis/web/controller/configuration/ConfigSynchronizationController.java @@ -0,0 +1,69 @@ +package com.nis.web.controller.configuration; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.nis.domain.FunctionServiceDict; +import com.nis.domain.Page; +import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.util.Constants; +import com.nis.util.DictUtils; +import com.nis.web.controller.BaseController; + +/** + * 配置全量同步 + * @author zhangwei + * + */ +@Controller +@RequestMapping("${adminPath}/config/synchronization") +public class ConfigSynchronizationController extends BaseController { + + /** + * 下发同步命令 + */ + @RequestMapping(value = {"cmd"}) + public String cmd(Model model,String cmd){ + + return ""; + } + + /** + * 下发同步配置 + */ + @RequestMapping(value = {"send"}) + public void send(Model model,HttpServletRequest request,HttpServletResponse response){ + try { + configSynchronizationService.send(request,response,null); + } catch (NoSuchFieldException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + /** + * 同步状态获取 + */ + @RequestMapping(value = {"getStatus"}) + public String getStatus(Model model){ + + return ""; + } +} diff --git a/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.java b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.java new file mode 100644 index 000000000..138f8671d --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.java @@ -0,0 +1,84 @@ +package com.nis.web.dao.configuration; + +import java.util.Date; +import java.util.List; + +import org.apache.ibatis.annotations.MapKey; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Param; + +import com.nis.domain.configuration.AppByteCfg; +import com.nis.domain.configuration.AppComplexKeywordCfg; +import com.nis.domain.configuration.AppDomainCfg; +import com.nis.domain.configuration.AppHeaderCfg; +import com.nis.domain.configuration.AppHttpCfg; +import com.nis.domain.configuration.AppIdCfg; +import com.nis.domain.configuration.AppIdCfg.AppFeaturesIndex; +import com.nis.domain.configuration.AppInnerRuleCfg; +import com.nis.domain.configuration.AppIpCfg; +import com.nis.domain.configuration.AppPolicyCfg; +import com.nis.domain.configuration.AppSslCertCfg; +import com.nis.domain.configuration.AppStringCfg; +import com.nis.domain.configuration.AppTcpCfg; +import com.nis.domain.configuration.AppTopicDomainCfg; +import com.nis.domain.configuration.AvFileSampleCfg; +import com.nis.domain.configuration.BaseCfg; +import com.nis.domain.configuration.BaseStringCfg; +import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.domain.configuration.ComplexkeywordCfg; +import com.nis.domain.configuration.DdosIpCfg; +import com.nis.domain.configuration.DnsIpCfg; +import com.nis.domain.configuration.DnsResStrategy; +import com.nis.domain.configuration.FileDigestCfg; +import com.nis.domain.configuration.IpPortCfg; +import com.nis.domain.configuration.PxyObjKeyring; +import com.nis.domain.configuration.PxyObjTrustedCaCert; +import com.nis.domain.configuration.PxyObjTrustedCaCrl; +import com.nis.domain.configuration.WebsiteDomainTopic; +import com.nis.web.dao.CrudDao; +import com.nis.web.dao.MyBatisDao; + + +/** + * 配置全量同步相关配置数据处理类 + * @author zhangwei + * + */ +@MyBatisDao +public interface ConfigSynchronizationDao { + //app策略配置增删改查 +// public List findAppPolicyList(AppPolicyCfg entity) ; +// public List getAppPolicyIpList(AppPolicyCfg entity); +// //app协议IP配置增删改查 +// public List findAppIpList(AppIpCfg entity) ; +// //app http特征增删改查 +// public List findAppHttpList(AppHttpCfg entity) ; +// //app 域名配置增删改查 +// public List findAppDomainList(AppDomainCfg entity) ; +// //app 主题网站配置增删改查 +// public List findAppTopicDomainList(AppTopicDomainCfg entity) ; +// //app 字节特征增删改查 +// public List findAppByteList(AppByteCfg entity) ; +// //app ssl证书特征配置CRUD +// public List findAppSslList(AppSslCertCfg entity); +// //app header特征配置CRUD +// public List findAppHeaderList(AppHeaderCfg entity); +// //域名关联表操作 +// public List getDomainDict(WebsiteDomainTopic websiteDomainTopic); + + public List getCfgIndexList(BaseCfg entity); + public List getIpPortList(@Param("tableName")String tableName,@Param("compileIds")List compileIds); + public List getStrList(@Param("tableName")String tableName,@Param("compileIds")List compileIds); + public List getComplexStrList(@Param("tableName")String tableName,@Param("compileIds")List compileIds); + public List getFileDigestList(@Param("tableName")String tableName,@Param("compileIds")List compileIds); + + public List getDdosIpCfgList(BaseCfg entity); + + public List getAvFileCfgList(BaseCfg entity); + public List getPxyObjKeyringCfgList(BaseCfg entity); + public List getPxyObjTrustedCertCfgList(BaseCfg entity); + public List getPxyObjTrustedCrlCfgList(BaseCfg entity); + public List getDnsStrategyList(BaseCfg entity); + public List getDnsIpCfgList(BaseCfg entity); + public List getIpPortListByService(BaseCfg entity); +} diff --git a/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml new file mode 100644 index 000000000..886607f6a --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml @@ -0,0 +1,1357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a.cfg_id,a.cfg_desc,a.action,a.is_valid,a.is_audit,a.creator_id,a.audit_time, + a.service_id,a.request_id,a.compile_id,a.is_area_effective,a.classify,a.attribute,a.lable, + a.area_effective_ids,a.function_id,a.do_log,a.dns_strategy_id,a.user_region1,a.user_region2, + a.user_region3,a.user_region4,a.user_region5 + + + a.cfg_id,a.cfg_desc,a.action,a.is_valid,a.is_audit,a.creator_id,a.audit_time, + a.service_id,a.request_id,a.compile_id,a.is_area_effective,a.classify,a.attribute,a.lable, + a.area_effective_ids,a.function_id,a.ip_type,a.src_ip_address,a.ip_pattern,a.port_pattern,a.src_port + ,a.protocol,a.protocol_id,a.direction,a.dest_port,a.dest_ip_address,a.cfg_type,a.pps_threadshold, + a.antiddos_protocol,a.bps_threadshold + + + a.ip_type,a.src_ip_address,a.ip_pattern,a.port_pattern,a.src_port + ,a.protocol,a.protocol_id,a.direction,a.dest_port,a.dest_ip_address,a.cfg_type,a.compile_id + + + a.cfg_desc,a.cfg_keywords,a.cfg_type, + a.expr_type,a.match_method,a.is_hexbin,a.compile_id + + + a.cfg_desc,a.cfg_keywords,a.district,a.cfg_type, + a.expr_type,a.match_method,a.is_hexbin,a.compile_id + + + a.raw_len,a.digest,a.cfds_level,a.file_url,a.compile_id + + + a.cfg_id,a.cfg_desc + ,a.cert_file + , a.issuer + ,a.cfg_type,a.action + ,a.is_valid,a.is_audit,a.creator_id,a.create_time,a.editor_id + ,a.edit_time,a.auditor_id,a.audit_time,a.service_id,a.request_id + ,a.is_area_effective,a.classify,a.attribute,a.lable + ,a.area_effective_ids,a.function_id,a.cfg_region_code,a.compile_id + + + a.cfg_id,a.cfg_desc + ,a.crl_file + ,a.cert_id + , a.issuer + ,a.cfg_type,a.action + ,a.is_valid,a.is_audit,a.creator_id,a.create_time,a.editor_id + ,a.edit_time,a.auditor_id,a.audit_time,a.service_id,a.request_id + ,a.is_area_effective,a.classify,a.attribute,a.lable + ,a.area_effective_ids,a.function_id,a.cfg_region_code,a.compile_id + + + a.cfg_id,a.cfg_desc + , a.keyring_type + ,a.private_key_file + ,a.public_key_file + ,a.expire_after + , a.public_key_algo + , a.crl + , a.issuer + ,a.subject + ,a.not_before_time + ,a.not_after_time + ,a.cn + ,a.alt_name + ,a.cfg_type,a.action + ,a.is_valid,a.is_audit,a.creator_id,a.create_time,a.editor_id + ,a.edit_time,a.auditor_id,a.audit_time,a.service_id,a.request_id + ,a.is_area_effective,a.classify,a.attribute,a.lable + ,a.area_effective_ids,a.function_id,a.cfg_region_code,a.compile_id + + + a.CFG_ID, a.SRC_URL,a.SAMPLE_URL, a.SRC_MD5,a.SAMPLE_MD5,a.CFG_DESC,a.ACTION,a.IS_VALID,a.IS_AUDIT, + a.CREATOR_ID,a.CREATE_TIME,a.EDITOR_ID,a.EDIT_TIME,a.AUDITOR_ID,a.AUDIT_TIME, + a.SERVICE_ID,a.REQUEST_ID,a.COMPILE_ID,a.IS_AREA_EFFECTIVE,a.CLASSIFY, + a.ATTRIBUTE,a.LABLE,a.AREA_EFFECTIVE_IDS,a.function_id,a.cfg_type,a.cfg_region_code,a.LEVEL, + a.src_path,a.sample_path + + + a.CFG_ID, a.description,a.CFG_DESC,a.ACTION,a.IS_VALID,a.IS_AUDIT, + a.CREATOR_ID,a.CREATE_TIME,a.EDITOR_ID,a.EDIT_TIME,a.AUDITOR_ID,a.AUDIT_TIME, + a.SERVICE_ID,a.REQUEST_ID,a.COMPILE_ID,a.IS_AREA_EFFECTIVE,a.CLASSIFY, + a.ATTRIBUTE,a.LABLE,a.AREA_EFFECTIVE_IDS,a.function_id,a.cfg_type,a.cfg_region_code,a.LEVEL,a.do_log + + + a.cfg_id,a.cfg_desc,a.res_group_1_id, + a.res_group_1_num,a.res_group_2_id,a.res_group_2_num,a.res_group_3_id + ,a.res_group_3_num,a.res_group_4_id,a.res_group_4_num + ,a.res_group_5_id,a.res_group_5_num,a.min_ttl + ,a.max_ttl,a.cfg_type,a.action + ,a.is_valid,a.is_audit,a.creator_id,a.create_time,a.editor_id + ,a.edit_time,a.auditor_id,a.audit_time,a.service_id,a.request_id + ,a.is_area_effective,a.classify,a.attribute,a.lable + ,a.area_effective_ids,a.function_id,a.cfg_region_code,a.compile_id + + + a.cfg_id,a.cfg_desc,a.ip_type,a.src_ip_address,a.ip_pattern,a.port_pattern,a.src_port + ,a.protocol,a.protocol_id,a.direction,a.cfg_type,a.action,a.dest_port,a.dest_ip_address + ,a.is_valid,a.is_audit,a.creator_id,a.create_time,a.editor_id + ,a.edit_time,a.auditor_id,a.audit_time,a.service_id,a.request_id, + a.compile_id,a.is_area_effective,a.classify,a.attribute,a.lable + ,a.area_effective_ids,a.function_id,a.cfg_region_code,a.dns_strategy_id + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/nis/web/service/configuration/ConfigSynchronizationService.java b/src/main/java/com/nis/web/service/configuration/ConfigSynchronizationService.java new file mode 100644 index 000000000..bbe19854d --- /dev/null +++ b/src/main/java/com/nis/web/service/configuration/ConfigSynchronizationService.java @@ -0,0 +1,557 @@ +package com.nis.web.service.configuration; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import net.sf.json.JSONObject; + +import org.apache.poi.ss.formula.functions.T; +import org.dom4j.Node; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import antlr.StringUtils; + +import com.nis.domain.FunctionServiceDict; +import com.nis.domain.Page; +import com.nis.domain.configuration.AppPolicyCfg; +import com.nis.domain.configuration.AvFileSampleCfg; +import com.nis.domain.configuration.BaseCfg; +import com.nis.domain.configuration.BaseStringCfg; +import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.domain.configuration.ComplexkeywordCfg; +import com.nis.domain.configuration.DdosIpCfg; +import com.nis.domain.configuration.DnsIpCfg; +import com.nis.domain.configuration.DnsResStrategy; +import com.nis.domain.configuration.FileDigestCfg; +import com.nis.domain.configuration.IpPortCfg; +import com.nis.domain.configuration.PxyObjKeyring; +import com.nis.domain.configuration.PxyObjTrustedCaCert; +import com.nis.domain.configuration.PxyObjTrustedCaCrl; +import com.nis.domain.maat.MaatCfg; +import com.nis.domain.maat.ToMaatBean; +import com.nis.domain.maat.ToMaatResult; +import com.nis.domain.maat.MaatCfg.DigestCfg; +import com.nis.domain.maat.MaatCfg.GroupCfg; +import com.nis.domain.maat.MaatCfg.IpCfg; +import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; +import com.nis.domain.maat.MaatCfg.StringCfg; +import com.nis.util.ConfigServiceUtil; +import com.nis.util.Constants; +import com.nis.util.DateUtils; +import com.nis.util.DictUtils; +import com.nis.util.ServiceConfigTemplateUtil; +import com.nis.util.StringUtil; +import com.nis.web.dao.configuration.ConfigSynchronizationDao; +import com.nis.web.security.UserUtils; +import com.nis.web.service.BaseService; + +/** + * 配置全量同步事务类 + * @author zhangwei + * + */ +@Service +public class ConfigSynchronizationService extends BaseService{ + @Autowired + protected ConfigSynchronizationDao configSynchronizationDao; + private ToMaatBean maatBean; + private MaatCfg maatCfg; + private List configCompileList; + private List groupRelationList; + private List ipRegionList; + private List strRegionList; + private List numRegionList; + private List digestRegionList; + private List areaIpRegionList; + + /** + * 配置全量更新下发 + * @param request + * @param response + * @throws IllegalAccessException + * @throws IllegalArgumentException + * @throws SecurityException + * @throws NoSuchFieldException + * @throws ClassNotFoundException + */ + public void send(HttpServletRequest request,HttpServletResponse response,BaseCfg cfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException { + long start = System.currentTimeMillis(); + ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil(); + if(cfg==null){ + List> serviceList = serviceTemplate.getServiceList(); + for(Map service:serviceList){ + String tableName = service.get("tableName").toString(); + String serviceType = service.get("serviceType").toString(); + String className = service.get("className").toString(); + String serviceId = service.get("id").toString(); + BaseCfg entity = new BaseCfg(); + entity.setServiceId(Integer.valueOf(serviceId)); + entity.setIsAudit(1); + entity.setIsValid(1); + if("1".equals(serviceType)){//maat类配置 + List> cfgList = (List>) service.get("cfgList"); + List> userRegionList = (List>) service.get("userRegionList"); + if("cfg_index_info".equals(tableName)){ + Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); + handleNtcMaatData(cfgList,userRegionList,page,entity,request,response,false); + }else if("ddos_ip_cfg".equals(tableName)){ + Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); + handleDdosMaatData(cfgList,userRegionList,page,entity,request,response,false); + } + }else if("2".equals(serviceType)){//回调类配置 + entity.setTableName(tableName); + entity.setServiceId(Integer.valueOf(serviceId)); + Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); + handleCallbackData(className,page,entity,request,response,false); + } + } + long end = System.currentTimeMillis(); + logger.info("本次配置全量同步,开始时间:"+start + +",结束时间:"+end + +",共计花费"+((end-start)/1000+"秒")); + }else{ + + } + + + } + /** + * 处理ntc业务maat类配置 + * @param serviceId + * @param request + * @param response + * @throws SecurityException + * @throws NoSuchFieldException + * @throws IllegalAccessException + * @throws IllegalArgumentException + */ + public void handleNtcMaatData(List>cfgList,List>userRegionList, + Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, + boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ + + boolean hasData = true; + while(hasData){ + List ipList = new ArrayList(); + List strList = new ArrayList(); + List complexStrList = new ArrayList(); + List numList = new ArrayList(); + List fileList = new ArrayList(); + maatBean = new ToMaatBean(); + configCompileList = new ArrayList(); + entity.setPage(page); + List list = configSynchronizationDao.getCfgIndexList(entity); + if(!StringUtil.isEmpty(list)){ + List compileIds = new ArrayList(); + for(CfgIndexInfo cfg:list){ + compileIds.add(cfg.getCompileId()); + } + if(cfgList!=null){ + for(Map m:cfgList){ + String tableName = m.get("tableName").toString(); + if("1".equals(m.get("cfgType"))){ + if(tableName.equals("asn_ip_cfg")){ + + }else{ + ipList.addAll(configSynchronizationDao.getIpPortList(tableName, compileIds)); + } + }else if("2".equals(m.get("cfgType"))){ + strList.addAll(configSynchronizationDao.getStrList(tableName,compileIds)); + }else if("3".equals(m.get("cfgType"))){ + complexStrList.addAll(configSynchronizationDao.getComplexStrList(tableName,compileIds)); + }else if("4".equals(m.get("cfgType"))){ + + }else if("5".equals(m.get("cfgType"))){ + fileList.addAll(configSynchronizationDao.getFileDigestList(tableName, compileIds)); + } + } + } + for(CfgIndexInfo cfg:list){ + maatCfg = new MaatCfg(); + maatCfg.initDefaultValue(); + groupRelationList = new ArrayList(); + ipRegionList = new ArrayList(); + strRegionList = new ArrayList(); + numRegionList = new ArrayList(); + digestRegionList = new ArrayList(); + areaIpRegionList = new ArrayList(); + List list1 = new ArrayList(); + List list2 = new ArrayList(); + List list3 = new ArrayList(); + List list4 = new ArrayList(); + List list5 = new ArrayList(); + String userRegion = ""; + //处理自定义域 + if(userRegionList!=null){ + for(Map n:userRegionList){ + Object userRegionPosition = n.get("userRegionPosition"); + if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ + //通过反射机制获取自定义域字段值 + String regionColumn = n.get("regionColumn").toString(); + Class aClass = null; + if(userRegionPosition.toString().equals(("0"))){ + aClass = BaseCfg.class; + }else{ + aClass = CfgIndexInfo.class; + } + + Object value = ""; + if(entity.getServiceId().equals(517)||entity.getServiceId().equals(560)){//代理替换策略 + String[] regionArray = regionColumn.split(","); + for(int r=0;r0){ + ipList.removeAll(list1); + Map map = cfgConvert(ipRegionList,list1,1,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + ipRegionList=map.get("dstList"); + if(map.get("numRegionList")!=null){ + numRegionList.addAll(map.get("numRegionList")); + } + } + if(list2.size()>0){ + strList.removeAll(list2); + Map map = cfgConvert(strRegionList,list2,2,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + strRegionList=map.get("dstList"); + } + if(list3.size()>0){ + complexStrList.removeAll(list3); + Map map = cfgConvert(strRegionList,list3,3,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + strRegionList=map.get("dstList"); + } + if(list4.size()>0){ + numList.removeAll(list4); + Map map = cfgConvert(numRegionList,list4,4,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + numRegionList=map.get("dstList"); + } + if(list5.size()>0){ + fileList.removeAll(list5); + Map map = cfgConvert(digestRegionList,list5,5,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + digestRegionList=map.get("dstList"); + } + + BeanUtils.copyProperties(cfg, maatCfg); + maatCfg.setAction(cfg.getAction()); + maatCfg.setAuditTime(cfg.getAuditTime()); + maatCfg.setIpRegionList(ipRegionList); + maatCfg.setStrRegionList(strRegionList); + maatCfg.setNumRegionList(numRegionList); + maatCfg.setDigestRegionList(digestRegionList); + maatCfg.setGroupRelationList(groupRelationList); + maatCfg.setGroupNum(groupRelationList.size()); + maatCfg.setAreaIpRegionList(areaIpRegionList); + maatCfg.setIsValid(cfg.getIsValid()); + if(!StringUtil.isEmpty(userRegion)){ + maatCfg.setUserRegion(userRegion); + } + configCompileList.add(maatCfg); + } + page.setList(list); + if(page.isLastPage()){ + hasData = false; + }else{ + page.setPageNo(page.getNext()); + } + if(!StringUtil.isEmpty(configCompileList.size())){ + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + String json=gsonToJson(maatBean); +// System.out.println(json); + + //调用服务接口配置全量更新 + ToMaatResult result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED")); + } + }else{ + hasData = false; + } + } + } + + /** + * 处理ddos配置 + * @param serviceId + * @param request + * @param response + * @throws SecurityException + * @throws NoSuchFieldException + * @throws IllegalAccessException + * @throws IllegalArgumentException + */ + public void handleDdosMaatData(List>cfgList,List>userRegionList, + Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, + boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ + + boolean hasData = true; + while(hasData){ + List ipList = new ArrayList(); + maatBean = new ToMaatBean(); + configCompileList = new ArrayList(); + entity.setPage(page); + List list = configSynchronizationDao.getDdosIpCfgList(entity); + if(!StringUtil.isEmpty(list)){ + for(DdosIpCfg cfg:list){ + maatCfg = new MaatCfg(); + maatCfg.initDefaultValue(); + groupRelationList = new ArrayList(); + ipRegionList = new ArrayList(); + strRegionList = new ArrayList(); + numRegionList = new ArrayList(); + digestRegionList = new ArrayList(); + areaIpRegionList = new ArrayList(); + List list1 = new ArrayList(); + String userRegion = ""; + //处理自定义域 + if(userRegionList!=null){ + for(Map n:userRegionList){ + Object userRegionPosition = n.get("userRegionPosition"); + if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ + //通过反射机制获取自定义域字段值 + String regionColumn = n.get("regionColumn").toString(); + Class aClass = null; + if(userRegionPosition.toString().equals(("0"))){ + aClass = BaseCfg.class; + }else{ + aClass = DdosIpCfg.class; + } + Object value = ""; + Field field = aClass.getDeclaredField(regionColumn); + field.setAccessible(true); + value = field.get(cfg); + if(!StringUtil.isEmpty(value)){ + if(StringUtil.isEmpty(n.get("regionKey"))){ + userRegion = value.toString(); + }else{ + userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; + } + } + } + } + if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ + userRegion = userRegion.substring(0, userRegion.length()-1); + } + } + list1.add(cfg); + if(list1.size()>0){ + ipList.removeAll(list1); + Map map = cfgConvert(ipRegionList,list1,1,cfg,groupRelationList); + groupRelationList=map.get("groupList"); + ipRegionList=map.get("dstList"); + if(map.get("numRegionList")!=null){ + numRegionList.addAll(map.get("numRegionList")); + } + } + BeanUtils.copyProperties(cfg, maatCfg); + maatCfg.setAction(cfg.getAction()); + maatCfg.setAuditTime(cfg.getAuditTime()); + maatCfg.setIpRegionList(ipRegionList); + maatCfg.setStrRegionList(strRegionList); + maatCfg.setNumRegionList(numRegionList); + maatCfg.setDigestRegionList(digestRegionList); + maatCfg.setGroupRelationList(groupRelationList); + maatCfg.setGroupNum(groupRelationList.size()); + maatCfg.setAreaIpRegionList(areaIpRegionList); + maatCfg.setIsValid(cfg.getIsValid()); + if(!StringUtil.isEmpty(userRegion)){ + maatCfg.setUserRegion(userRegion); + } + configCompileList.add(maatCfg); + } + page.setList(list); + if(page.isLastPage()){ + hasData = false; + }else{ + page.setPageNo(page.getNext()); + } + if(!StringUtil.isEmpty(configCompileList.size())){ + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + String json=gsonToJson(maatBean); +// System.out.println(json); + + //调用服务接口配置全量更新 + ToMaatResult result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED")); + } + }else{ + hasData = false; + } + } + } + /** + * 处理app业务maat类配置 + * @param serviceId + * @param request + * @param response + */ + public void handleAppMaatData(List>cfgList,List>userRegionList, + Page page,Object entity,HttpServletRequest request,HttpServletResponse response){ + /*if(entity instanceof AppPolicyCfg){ + AppPolicyCfg newEntity = entity; + entity.setPage(page); + } + + boolean hasData = true; + while(hasData){ + List list = configSynchronizationDao.getCfgIndexList(entity); + page.setList(list); + if(page.isLastPage()){ + hasData = false; + } + }*/ + } + + /** + * 处理回调类业务配置 + * @param serviceId + * @param request + * @param response + * @throws ClassNotFoundException + */ + public void handleCallbackData(String className, + Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, + boolean isUpdateCfg) throws ClassNotFoundException{ + + boolean hasData = true; + while(hasData){ + maatBean = new ToMaatBean(); + configCompileList = new ArrayList(); + entity.setPage(page); + List list = new ArrayList(); + List newList = new ArrayList(); + if(className.equals("AvFileSampleCfg")){ + list = configSynchronizationDao.getAvFileCfgList(entity); + }else if(className.equals("PxyObjKeyring")){ + list = configSynchronizationDao.getPxyObjKeyringCfgList(entity); + for(int i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sql/20181124/add_sys_dict_of_Cfgsync b/src/main/resources/sql/20181124/add_sys_dict_of_Cfgsync new file mode 100644 index 000000000..16af769f9 --- /dev/null +++ b/src/main/resources/sql/20181124/add_sys_dict_of_Cfgsync @@ -0,0 +1,13 @@ +INSERT INTO `sys_data_dictionary_name` (`id`, `module_name`, `mark`, `remark`, `revision`, `create_time`, `modify_time`, `status`) VALUES ('141', '配置同步状态', 'config_sync_status', '', '', '2018-11-23 10:32:08', '2018-11-23 10:32:08', '1'); +INSERT INTO `sys_data_dictionary_name` (`id`, `module_name`, `mark`, `remark`, `revision`, `create_time`, `modify_time`, `status`) VALUES ('142', '配置同步当前状态', 'currrent_sync_status', '此状态在配置同步时线程定义获取综合服务端的同步状态,随时更新。', '', '2018-11-23 10:34:27', '2018-11-23 10:34:27', '1'); +INSERT INTO `sys_data_dictionary_name` (`id`, `module_name`, `mark`, `remark`, `revision`, `create_time`, `modify_time`, `status`) VALUES ('143', '配置同步接口URL', 'config_sync_url', '', '', '2018-11-23 10:50:52', '2018-11-23 10:50:52', '1'); + +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3024', '0', 'start', '开始', '0', '1', '1', '141'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3025', '1', 'init', '初始化', '0', '1', '1', '141'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3026', '2', 'doing', '进行中', '0', '1', '1', '141'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3027', '3', 'finish', '完成', '0', '1', '1', '141'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3028', '-1', 'fail', '失败', '0', '1', '1', '141'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3029', 'status', '0', '', '0', '1', '1', '142'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3030', 'get_sync_status', 'http://192.168.10.204:9999/galaxy-service/service/cfg_batch/v1/status', '', '0', '1', '1', '143'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3031', 'sync_send', 'http://192.168.10.204:9999/galaxy-service/service/cfg_batch/v1/configSources', '', '0', '1', '1', '143'); +INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3032', 'sync_cmd', 'http://192.168.10.204:9999/galaxy-service/service/cfg_batch/v1/status', '', '0', '1', '1', '143'); diff --git a/src/main/resources/sql/20181124/alter_complex_keyword_cfg b/src/main/resources/sql/20181124/alter_complex_keyword_cfg new file mode 100644 index 000000000..23dd84561 --- /dev/null +++ b/src/main/resources/sql/20181124/alter_complex_keyword_cfg @@ -0,0 +1 @@ +ALTER TABLE complex_keyword_cfg CHANGE COLUMN keywords cfg_keywords VARCHAR(2048) NOT NULL; \ No newline at end of file