diff --git a/src/main/java/com/nis/domain/configuration/template/BlackListIPTemplate.java b/src/main/java/com/nis/domain/configuration/template/BlackListIPTemplate.java new file mode 100644 index 000000000..23fa2cc70 --- /dev/null +++ b/src/main/java/com/nis/domain/configuration/template/BlackListIPTemplate.java @@ -0,0 +1,14 @@ +package com.nis.domain.configuration.template; + +import com.nis.util.excel.ExcelField; + +public class BlackListIPTemplate extends IpAllTemplate { + private Integer doBlackList; + @ExcelField(title="doBlacklist",align=2,sort=2) + public Integer getDoBlackList() { + return doBlackList; + } + public void setDoBlackList(Integer doBlackList) { + this.doBlackList = doBlackList; + } +} diff --git a/src/main/java/com/nis/domain/configuration/template/BlackListStringTemplate.java b/src/main/java/com/nis/domain/configuration/template/BlackListStringTemplate.java new file mode 100644 index 000000000..b1c35ae9c --- /dev/null +++ b/src/main/java/com/nis/domain/configuration/template/BlackListStringTemplate.java @@ -0,0 +1,16 @@ +package com.nis.domain.configuration.template; + +import com.nis.util.excel.ExcelField; + +public class BlackListStringTemplate extends StringAllTemplate { + private Integer doBlackList; + @ExcelField(title="doBlacklist",align=2,sort=2) + public Integer getDoBlackList() { + return doBlackList; + } + + public void setDoBlackList(Integer doBlackList) { + this.doBlackList = doBlackList; + } + +} diff --git a/src/main/java/com/nis/domain/configuration/template/DnsStringTemplate.java b/src/main/java/com/nis/domain/configuration/template/DnsStringTemplate.java new file mode 100644 index 000000000..aed034547 --- /dev/null +++ b/src/main/java/com/nis/domain/configuration/template/DnsStringTemplate.java @@ -0,0 +1,23 @@ +package com.nis.domain.configuration.template; + +import com.nis.util.excel.ExcelField; + +public class DnsStringTemplate extends StringAllTemplate { + /** + * @Fields serialVersionUID:TODO(用一句话描述这个变量表示什么) + * + * @since 1.0.0 + */ + + + private Integer dnsStrategyId; + + @ExcelField(title="policy_name",align=2,sort=3) + public Integer getDnsStrategyId() { + return dnsStrategyId; + } + public void setDnsStrategyId(Integer dnsStrategyId) { + this.dnsStrategyId = dnsStrategyId; + } + +} diff --git a/src/main/java/com/nis/domain/configuration/template/IpAllTemplate.java b/src/main/java/com/nis/domain/configuration/template/IpAllTemplate.java index 860577947..66e4263f2 100644 --- a/src/main/java/com/nis/domain/configuration/template/IpAllTemplate.java +++ b/src/main/java/com/nis/domain/configuration/template/IpAllTemplate.java @@ -8,7 +8,6 @@ */ package com.nis.domain.configuration.template; -import com.google.gson.JsonObject; import com.nis.util.excel.ExcelField; /** diff --git a/src/main/java/com/nis/util/excel/ExportExcel.java b/src/main/java/com/nis/util/excel/ExportExcel.java index 78e925289..d8d716d5d 100644 --- a/src/main/java/com/nis/util/excel/ExportExcel.java +++ b/src/main/java/com/nis/util/excel/ExportExcel.java @@ -536,6 +536,29 @@ public class ExportExcel { index++; } } + //doBlackList + if("doBlacklist".equals(headerStr)) { + commentStr=""; + List dict=DictUtils.getDictList("DO_BLACKLIST"); + if(dict !=null && dict.size()>0){ + for (SysDataDictionaryItem sysDataDictionaryItem : dict) { + String itemCode = sysDataDictionaryItem.getItemCode(); + commentStr=commentStr+itemCode+"("+msgProp.getProperty(sysDataDictionaryItem.getItemValue(),sysDataDictionaryItem.getItemValue())+")\n"; + index++; + } + defaultValue = String.valueOf(Constants.MAAT_CFG_DOLOG_DOBLACKLIST_DEFAULT); + } + commentStr=msgProp.getProperty("select")+":\n"+commentStr; + index++; + commentStr=commentStr+"\n"+msgProp.getProperty("rule_desc_tip")+":\n"; + index++; + if(!StringUtil.isEmpty(defaultValue)){ + //1、默认值说明 + commentStr=commentStr+"▶"+msgProp.getProperty("default_value")+":"+defaultValue+"\n"; + index++; + index++; + } + } /** Ip Spoofing **/ if("spoofing".equals(headerStr) && (region.getFunctionId().equals(214))){ diff --git a/src/main/java/com/nis/util/excel/thread/CheckIpFormatThread.java b/src/main/java/com/nis/util/excel/thread/CheckIpFormatThread.java index 7bd398430..974b692b8 100644 --- a/src/main/java/com/nis/util/excel/thread/CheckIpFormatThread.java +++ b/src/main/java/com/nis/util/excel/thread/CheckIpFormatThread.java @@ -129,7 +129,7 @@ public class CheckIpFormatThread implements Callable{ } // doLog属性检验 this.validDoLog(baseIpCfg,errInfo); - + this.validDoBlackList(baseIpCfg, errInfo); // 特殊字段验证 // packet ip ratelimit if (serviceDict!=null&&serviceDict.getFunctionId().intValue() == 5 && serviceDict.getAction().intValue() == 64) { @@ -1229,7 +1229,32 @@ public class CheckIpFormatThread implements Callable{ } } - + /** + * doBlackList属性校验 + * @param baseStringCfg + * @param errInfo + */ + public void validDoBlackList(IpPortCfg baseIpCfg, StringBuffer errInfo) { + if(regionDict.getFunctionId().equals(34)&&serviceDict.getAction().equals(16)) { + List dict=DictUtils.getDictList("DO_BLACKLIST"); + if(baseIpCfg.getDoBlackList()==null) { + baseIpCfg.setDoBlackList(Constants.MAAT_CFG_DOLOG_DOBLACKLIST_DEFAULT); + } + String dobalcklistVals=new String(); + if(dict !=null && dict.size()>0){ + for (SysDataDictionaryItem sysDataDictionaryItem : dict) { + String itemCode = sysDataDictionaryItem.getItemCode(); + dobalcklistVals+=itemCode+","; + } + } + Integer doBlackList = baseIpCfg.getDoBlackList(); + if(!dobalcklistVals.contains(doBlackList+"")) { + errInfo.append( + String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_blacklist")) + + ";"); + } + } + } /** * 根据位运算把 byte[] -> int * diff --git a/src/main/java/com/nis/util/excel/thread/CheckStringFormatThread.java b/src/main/java/com/nis/util/excel/thread/CheckStringFormatThread.java index 2be4d90a0..e1abb1f06 100644 --- a/src/main/java/com/nis/util/excel/thread/CheckStringFormatThread.java +++ b/src/main/java/com/nis/util/excel/thread/CheckStringFormatThread.java @@ -20,7 +20,6 @@ import com.nis.domain.FunctionRegionDict; import com.nis.domain.FunctionServiceDict; import com.nis.domain.SysDataDictionaryItem; import com.nis.domain.configuration.BaseStringCfg; -import com.nis.domain.configuration.IpPortCfg; import com.nis.util.Constants; import com.nis.util.DictUtils; @@ -111,7 +110,8 @@ public class CheckStringFormatThread implements Callable{ } // doLog属性检验 this.validDoLog(baseStringCfg,errInfo); - + // doBlackList校验 + this.validDoBlackList(baseStringCfg,errInfo); if (regionDict.getRegionType().equals(2)) { if (regionDict.getFunctionId().equals(510) && "p2p_hash".equals(regionDict.getConfigServiceType())) { String userRegion1 = baseStringCfg.getUserRegion1(); @@ -535,4 +535,30 @@ public class CheckStringFormatThread implements Callable{ } } + /** + * doBlackList属性校验 + * @param baseStringCfg + * @param errInfo + */ + public void validDoBlackList(BaseStringCfg baseStringCfg, StringBuffer errInfo) { + if(regionDict.getFunctionId().equals(34)&&serviceDict.getAction().equals(16)) { + List dict=DictUtils.getDictList("DO_BLACKLIST"); + if(baseStringCfg.getDoBlackList()==null) { + baseStringCfg.setDoBlackList(Constants.MAAT_CFG_DOLOG_DOBLACKLIST_DEFAULT); + } + String dobalcklistVals=new String(); + if(dict !=null && dict.size()>0){ + for (SysDataDictionaryItem sysDataDictionaryItem : dict) { + String itemCode = sysDataDictionaryItem.getItemCode(); + dobalcklistVals+=itemCode+","; + } + } + Integer doBlackList = baseStringCfg.getDoBlackList(); + if(!dobalcklistVals.contains(doBlackList+"")) { + errInfo.append( + String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_blacklist")) + + ";"); + } + } + } } diff --git a/src/main/java/com/nis/web/controller/BaseController.java b/src/main/java/com/nis/web/controller/BaseController.java index da1d59524..de05780c6 100644 --- a/src/main/java/com/nis/web/controller/BaseController.java +++ b/src/main/java/com/nis/web/controller/BaseController.java @@ -36,6 +36,7 @@ import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.ui.Model; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -1396,7 +1397,7 @@ public class BaseController { } return null; } - + /** * 多域导入 * @@ -1759,7 +1760,6 @@ public class BaseController { logger.info("获取编译ID出错"); throw new MaatConvertException(":"+e.getMessage()); } - int ind=0; for (BaseIpCfg cfg : _ipPortCfgs) { cfg.setAction(serviceDict==null?null:serviceDict.getAction()); @@ -1802,7 +1802,6 @@ public class BaseController { cfg.setCompileId(compileIds.get(ind)); } ind++; - } ipCfgService.saveAndSend(regionDict, serviceDict, specificServiceCfg, _ipPortCfgs, cfgIndexInfos, appPolicyCfgs,appFeatureIndexs,asnNoMaps,isSend.equals("1")); cfgIndexInfos.clear(); @@ -2391,7 +2390,279 @@ public class BaseController { long end=System.currentTimeMillis(); logger.warn("import finish,cost:"+(end-start)); } - + public String importAppPolicyList(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + BlockingQueue ipPortCfgs =null; + BlockingQueue> stringCfgs =null; + List appPolicyCfgs = new ArrayList(); + ImportBigExcel ei=null; + Properties properties=this.getMsgProp(); + FunctionRegionDict appRegion = null; + if(serviceDict!=null) { + String regionCode = serviceDict.getRegionCode(); + for (String code : regionCode.split(",")) { + if (StringUtils.isNotBlank(code)) { + FunctionRegionDict d = DictUtils.getFunctionRegionDictByRegionCode(serviceDict.getFunctionId(), + Integer.parseInt(code)); + if (d != null && d.getConfigServiceType() != null + && d.getConfigServiceType().equals("app_policy")) { + appRegion = d; + break; + } + } + + } + } + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + try { + ei = new ImportBigExcel(file, 0, 1); + //------------------------------------check format start---------------------------- + if (regionDict.getRegionType().equals(1)) {// IP + if (serviceDict!=null&&serviceDict.getAction().equals(64)) { + ei.loadInitParams(IpRateLimitTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpRateLimitTemplate.class); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list); + }else { + ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpAllTemplate.class); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list); + } + }else if (regionDict.getRegionType().equals(2)) {// 字符串类 + ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(StringAllTemplate.class ); + stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list); + } + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + //------------------------------------check format end---------------------------- + Date date = new Date(); + String specServiceId = request.getParameter("appId"); + String behaviorId = request.getParameter("behaviorId"); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + SpecificServiceCfg specificServiceCfg = null; + if (StringUtils.isNotBlank(specServiceId)) { + specificServiceCfg = specificServiceCfgService + .getBySpecServiceId(Integer.parseInt(specServiceId)); + } + if (regionDict.getRegionType().equals(1)) {// IP + List _ipPortCfgs=com.beust.jcommander.internal.Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + if(specificServiceCfg!=null) { + cfg.setAppCode(specificServiceCfg.getSpecServiceCode()); + cfg.setSpecServiceId(specificServiceCfg.getSpecServiceId()); + if(StringUtils.isNotBlank(behaviorId)) + cfg.setBehavCode(Integer.parseInt(behaviorId)); + } + if (appRegion != null) { + AppPolicyCfg appPolicyCfg = new AppPolicyCfg(); + BeanUtils.copyProperties(cfg, appPolicyCfg,new String[] {"cfgId"}); + //appPolicyCfg.setSpecServiceId(specificServiceCfg.getSpecServiceId()); + //appPolicyCfg.setAppCode(specificServiceCfg.getSpecServiceCode()); + appPolicyCfg.setMatchMethod(0); + appPolicyCfg.setIsHexbin(0); + appPolicyCfg.setCfgType(appRegion.getConfigRegionValue()); + appPolicyCfg.setCfgRegionCode(appRegion.getConfigRegionCode()); + if (StringUtils.isNotBlank(behaviorId)) { + //appPolicyCfg.setBehavCode(Integer.parseInt(behaviorId)); + appPolicyCfg.setExprType(1); + } else { + appPolicyCfg.setExprType(0); + } + appPolicyCfgs.add(appPolicyCfg); + } + ind++; + } + appCfgService.savePolicyList(regionDict,serviceDict,appPolicyCfgs,_ipPortCfgs,isSend.equals("1")); + appPolicyCfgs.clear(); + _ipPortCfgs.clear(); + } + }else { + List _stringCfgs=com.beust.jcommander.internal.Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!stringCfgs.isEmpty()) { + stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_stringCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_stringCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_stringCfgs.size()); + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseStringCfg cfg : _stringCfgs) { + cfg.setAction(serviceDict.getAction()); + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_stringCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_stringCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict.getServiceId()); + if(compileIds!=null&&compileIds.size()==_stringCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + if(specificServiceCfg!=null) { + cfg.setAppCode(specificServiceCfg.getSpecServiceCode()); + cfg.setSpecServiceId(specificServiceCfg.getSpecServiceId()); + if(StringUtils.isNotBlank(behaviorId)) + cfg.setBehavCode(Integer.parseInt(behaviorId)); + } + if (appRegion != null) { + AppPolicyCfg appPolicyCfg = new AppPolicyCfg(); + BeanUtils.copyProperties(cfg, appPolicyCfg,new String[] {"cfgId"}); + //appPolicyCfg.setSpecServiceId(specificServiceCfg.getSpecServiceId()); + //appPolicyCfg.setAppCode(specificServiceCfg.getSpecServiceCode()); + appPolicyCfg.setMatchMethod(0); + appPolicyCfg.setIsHexbin(0); + appPolicyCfg.setCfgType(appRegion.getConfigRegionValue()); + appPolicyCfg.setCfgRegionCode(appRegion.getConfigRegionCode()); + if (StringUtils.isNotBlank(behaviorId)) { + //appPolicyCfg.setBehavCode(Integer.parseInt(behaviorId)); + appPolicyCfg.setExprType(1); + } else { + appPolicyCfg.setExprType(0); + } + appPolicyCfgs.add(appPolicyCfg); + } + ind++; + } + appCfgService.savePolicyList(regionDict,serviceDict,appPolicyCfgs,_stringCfgs,isSend.equals("1")); + appPolicyCfgs.clear(); + _stringCfgs.clear(); + } + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } + } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } public void deleteIps(Map asnNoMap,Integer ipType){ List toDelAndSendAsnIpCfgs=Lists.newArrayList(); List asnIds=Lists.newArrayList(asnNoMap.size()); diff --git a/src/main/java/com/nis/web/controller/configuration/AppCfgController.java b/src/main/java/com/nis/web/controller/configuration/AppCfgController.java index aaf5f874c..1fc46024e 100644 --- a/src/main/java/com/nis/web/controller/configuration/AppCfgController.java +++ b/src/main/java/com/nis/web/controller/configuration/AppCfgController.java @@ -7,7 +7,9 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -15,6 +17,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.taglibs.standard.functions.Functions; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -28,6 +31,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; import com.nis.domain.SysDataDictionaryItem; import com.nis.domain.configuration.AppBuiltInFeatureFile; @@ -40,10 +45,14 @@ import com.nis.domain.configuration.AppPolicyCfg; import com.nis.domain.configuration.AppSslCertCfg; import com.nis.domain.configuration.AppTcpCfg; import com.nis.domain.configuration.AppTopicDomainCfg; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; import com.nis.domain.configuration.WebsiteDomainTopic; +import com.nis.domain.configuration.template.IpAllTemplate; +import com.nis.domain.configuration.template.IpRateLimitTemplate; +import com.nis.domain.configuration.template.StringAllTemplate; import com.nis.domain.maat.ToMaatResult; import com.nis.domain.maat.ToMaatResult.ResponseData; import com.nis.domain.specific.SpecificServiceCfg; @@ -55,6 +64,7 @@ import com.nis.util.DictUtils; import com.nis.util.FileUtils; import com.nis.util.JsonMapper; import com.nis.util.StringUtil; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.BaseController; import com.nis.web.security.UserUtils; @@ -2189,4 +2199,14 @@ public class AppCfgController extends BaseController { // return "redirect:" + adminPath // +"/ntc/iplist/list?functionId="+entity.getFunctionId(); } + + @Override + @RequestMapping(value = "policyCfgImport", method=RequestMethod.POST) + public String importAppPolicyList(HttpServletRequest request, HttpServletResponse response, + RedirectAttributes redirectAttributes, @RequestParam("files")MultipartFile[] files, Integer serviceDictId, Integer requestId, + String attribute, String classify, String regionDictIds, String importPath) { + // TODO Auto-generated method stub + return super.importAppPolicyList(request, response, redirectAttributes, files, serviceDictId, requestId, attribute, + classify, regionDictIds, importPath); + } } diff --git a/src/main/java/com/nis/web/controller/configuration/BasicProtocolController.java b/src/main/java/com/nis/web/controller/configuration/BasicProtocolController.java index 7c42deb20..5da378fef 100644 --- a/src/main/java/com/nis/web/controller/configuration/BasicProtocolController.java +++ b/src/main/java/com/nis/web/controller/configuration/BasicProtocolController.java @@ -1,9 +1,6 @@ package com.nis.web.controller.configuration; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -21,29 +18,24 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.nis.domain.Page; import com.nis.domain.configuration.AppPolicyCfg; import com.nis.domain.configuration.BaseStringCfg; -import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; -import com.nis.domain.report.NtcPzReport; -import com.nis.domain.specific.ConfigGroupInfo; import com.nis.domain.specific.SpecificServiceCfg; import com.nis.exceptions.CallExternalProceduresException; import com.nis.exceptions.MaatConvertException; -import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.StringUtil; import com.nis.web.controller.BaseController; import com.nis.web.security.UserUtils; -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; -import net.sf.json.JsonConfig; - /** * 基础协议控制类 * @@ -396,5 +388,13 @@ public class BasicProtocolController extends BaseController { // return "redirect:" + adminPath // +"/ntc/iplist/list?functionId="+entity.getFunctionId(); } - + @Override + @RequestMapping(value = "import", method=RequestMethod.POST) + public String importAppPolicyList(HttpServletRequest request, HttpServletResponse response, + RedirectAttributes redirectAttributes, @RequestParam("files")MultipartFile[] files, Integer serviceDictId, Integer requestId, + String attribute, String classify, String regionDictIds, String importPath) { + // TODO Auto-generated method stub + return super.importAppPolicyList(request, response, redirectAttributes, files, serviceDictId, requestId, attribute, + classify, regionDictIds, importPath); + } } diff --git a/src/main/java/com/nis/web/controller/configuration/EncryptedTunnelBehaviorController.java b/src/main/java/com/nis/web/controller/configuration/EncryptedTunnelBehaviorController.java index 8c2666dfa..9417e2ae9 100644 --- a/src/main/java/com/nis/web/controller/configuration/EncryptedTunnelBehaviorController.java +++ b/src/main/java/com/nis/web/controller/configuration/EncryptedTunnelBehaviorController.java @@ -19,7 +19,9 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.nis.domain.Page; @@ -434,4 +436,14 @@ public class EncryptedTunnelBehaviorController extends BaseController { // +"/ntc/iplist/list?functionId="+entity.getFunctionId(); } + @Override + @RequestMapping(value = { "import" }) + public String importAppPolicyList(HttpServletRequest request, HttpServletResponse response, + RedirectAttributes redirectAttributes, @RequestParam("files")MultipartFile[] files, Integer serviceDictId, Integer requestId, + String attribute, String classify, String regionDictIds, String importPath) { + // TODO Auto-generated method stub + return super.importAppPolicyList(request, response, redirectAttributes, files, serviceDictId, requestId, attribute, + classify, regionDictIds, importPath); + } + } diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/BgpCfgController.java b/src/main/java/com/nis/web/controller/configuration/ntc/BgpCfgController.java index 1f8bc8129..a6e2b4702 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/BgpCfgController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/BgpCfgController.java @@ -1,36 +1,48 @@ package com.nis.web.controller.configuration.ntc; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import com.beust.jcommander.internal.Lists; +import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; -import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcBgpAsCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; +import com.nis.domain.configuration.template.IpAllTemplate; +import com.nis.domain.configuration.template.StringAllTemplate; import com.nis.exceptions.MaatConvertException; +import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; +import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.util.StringUtils; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.BaseController; import com.nis.web.security.UserUtils; @@ -312,5 +324,210 @@ public class BgpCfgController extends BaseController { // return "redirect:" + adminPath // +"/ntc/iplist/list?functionId="+entity.getFunctionId(); } + @RequestMapping(value = "bgpImport") + public String bgpImport(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + ImportBigExcel ei=null; + try { + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + Properties properties=this.getMsgProp(); + BlockingQueue ipPortCfgs =null; + BlockingQueue> stringCfgs =null; + List cfgIndexInfos = new ArrayList(); + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + ei = new ImportBigExcel(file, 0, 1); + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + //------------------------------------check format start---------------------------- + if (regionDict.getRegionType().equals(1)) {// IP + ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpAllTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + }else if (regionDict.getRegionType().equals(2)) {// 字符串类 + ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(StringAllTemplate.class ); + stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list); + } + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + //------------------------------------check format end---------------------------- + Date date = new Date(); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + if (regionDict.getRegionType().equals(1)) {// IP + List _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + bgpCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1")); + cfgIndexInfos.clear(); + _ipPortCfgs.clear(); + } + } else if (regionDict.getRegionType().equals(2)) { + List> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!stringCfgs.isEmpty()) { + stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_stringCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_stringCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_stringCfgs.size()); + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseStringCfg cfg : _stringCfgs) { + cfg.setAction(serviceDict.getAction()); + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_stringCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_stringCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict.getServiceId()); + if(compileIds!=null&&compileIds.size()==_stringCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo, new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + bgpCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1")); + cfgIndexInfos.clear(); + _stringCfgs.clear(); + } + } + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } } diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java b/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java index fda97e046..7936515c0 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/IpController.java @@ -1,5 +1,7 @@ package com.nis.web.controller.configuration.ntc; +import java.io.IOException; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -8,12 +10,18 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutionException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -23,18 +31,30 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.xml.sax.SAXException; +import com.beust.jcommander.internal.Lists; import com.nis.domain.FunctionRegionDict; import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.basics.AsnGroupInfo; +import com.nis.domain.configuration.AppComplexFeatureCfg; +import com.nis.domain.configuration.AppFeatureIndex; import com.nis.domain.configuration.AppPolicyCfg; +import com.nis.domain.configuration.AppTopicDomainCfg; import com.nis.domain.configuration.AsnKeywordCfg; +import com.nis.domain.configuration.BaseIpCfg; +import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.domain.configuration.ComplexkeywordCfg; +import com.nis.domain.configuration.DnsResStrategy; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; import com.nis.domain.configuration.template.AppDomainTemplate; import com.nis.domain.configuration.template.AppPayloadTemplate; import com.nis.domain.configuration.template.AsnIpTemplate; +import com.nis.domain.configuration.template.BlackListIPTemplate; +import com.nis.domain.configuration.template.BlackListStringTemplate; import com.nis.domain.configuration.template.ComplexStringAllNotDoLogTemplate; import com.nis.domain.configuration.template.ComplexStringAllTemplate; import com.nis.domain.configuration.template.DdosIpTemplate; @@ -66,15 +86,18 @@ import com.nis.domain.configuration.template.SnatTemplate; import com.nis.domain.configuration.template.StringAllNotDoLogTemplate; import com.nis.domain.configuration.template.StringAllTemplate; import com.nis.domain.configuration.template.TopicWebsiteTemplate; -import com.nis.domain.specific.SpecificServiceCfg; import com.nis.exceptions.MaatConvertException; +import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.util.excel.ExportExcel; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.BaseController; import com.nis.web.security.UserUtils; +import jersey.repackaged.com.google.common.collect.Maps; + /** * IP相关配置控制类 * @author dell @@ -429,6 +452,11 @@ public class IpController extends BaseController{ ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpAllNotDoLogTemplate.class, 2); excel.setDataList(pro,classList,null). write(request,response, fileName).dispose(); + }else if(regionDict.getFunctionId().equals(34)&&serviceDict.getAction().equals(16)) {//SSL + List classList=new ArrayList(); + ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, BlackListIPTemplate.class, 2); + excel.setDataList(pro,classList,null). + write(request,response, fileName).dispose(); }else{ List classList=new ArrayList(); ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpAllTemplate.class, 2); @@ -490,6 +518,11 @@ public class IpController extends BaseController{ ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, TopicWebsiteTemplate.class, 2); excel.setDataList(pro,classList,null). write(request,response, fileName).dispose(); + }else if(regionDict.getFunctionId().equals(34)&&serviceDict.getAction().equals(16)) {//SSL + List classList=new ArrayList(); + ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, BlackListStringTemplate.class, 2); + excel.setDataList(pro,classList,null). + write(request,response, fileName).dispose(); }else{ List classList=new ArrayList(); ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, StringAllTemplate.class, 2); @@ -553,18 +586,173 @@ public class IpController extends BaseController{ } //ip配置导入 - @RequestMapping(value = "import", method=RequestMethod.POST) - public String importIp(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, - @RequestParam("files") MultipartFile[] files - ,Integer serviceDictId - ,Integer requestId - ,String attribute - ,String classify - ,String regionDictIds - ,String importPath) { - this._import(request,response,redirectAttributes, files,serviceDictId,regionDictIds,requestId,attribute,classify); - return "redirect:" + adminPath+ importPath; + @Deprecated +// @RequestMapping(value = "import", method=RequestMethod.POST) + public String importIp(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + this._import(request,response,redirectAttributes, files,serviceDictId,regionDictIds,requestId,attribute,classify); + return "redirect:" + adminPath+ importPath; + } + @RequestMapping(value = "import", method=RequestMethod.POST) + public String importIPList(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + BlockingQueue ipPortCfgs =null; + List cfgIndexInfos = new ArrayList(); + ImportBigExcel ei=null; + Properties properties=this.getMsgProp(); + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + try { + ei = new ImportBigExcel(file, 0, 1); + //------------------------------------check format start---------------------------- + if (serviceDict!=null&&serviceDict.getAction().equals(64)) { + //加载模板 + ei.loadInitParams(IpRateLimitTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpRateLimitTemplate.class + ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list); + } else if(serviceDict!=null&&serviceDict.getAction().equals(32)) { + //加载模板 + ei.loadInitParams(IpAllNotDoLogTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpAllNotDoLogTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + } else { + //加载模板 + ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpAllTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + } + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + //------------------------------------check format end---------------------------- + Date date = new Date(); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + List _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + logger.info("获取编译ID出错",e); + e.printStackTrace(); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + if(regionDict.getFunctionId().equals(405)&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setUserRegion1(regionIds.get(ind).toString()); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + ipCfgService.saveAndSendIPList(regionDict, serviceDict, _ipPortCfgs, cfgIndexInfos,isSend.equals("1")); + cfgIndexInfos.clear(); + _ipPortCfgs.clear(); + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } + //ip配置导出 @RequestMapping(value = "exportIpAddr") public void exportIpAddr(Model model,HttpServletRequest request,HttpServletResponse response, diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/WebsiteController.java b/src/main/java/com/nis/web/controller/configuration/ntc/WebsiteController.java index fa02a7b73..5829286e2 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/WebsiteController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/WebsiteController.java @@ -8,13 +8,14 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.taglibs.standard.functions.Functions; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -25,28 +26,36 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import com.beust.jcommander.internal.Lists; import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.DnsResStrategy; -import com.nis.domain.configuration.ComplexStringCfgTemplate; -import com.nis.domain.configuration.template.IpCfgTemplate; -import com.nis.domain.specific.ConfigGroupInfo; -import com.nis.domain.configuration.StringCfgTemplate; import com.nis.domain.configuration.HttpBodyCfg; import com.nis.domain.configuration.HttpReqHeadCfg; import com.nis.domain.configuration.HttpResHeadCfg; import com.nis.domain.configuration.HttpUrlCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; +import com.nis.domain.configuration.template.BlackListIPTemplate; +import com.nis.domain.configuration.template.BlackListStringTemplate; +import com.nis.domain.configuration.template.ComplexStringAllTemplate; +import com.nis.domain.configuration.template.DnsComplexStringTemplate; +import com.nis.domain.configuration.template.DnsIpTemplate; +import com.nis.domain.configuration.template.DnsStringTemplate; +import com.nis.domain.configuration.template.IpAllTemplate; +import com.nis.domain.configuration.template.StringAllTemplate; import com.nis.exceptions.CallExternalProceduresException; import com.nis.exceptions.MaatConvertException; +import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.DictUtils; import com.nis.util.StringUtil; -import com.nis.util.excel.ImportExcel; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.BaseController; import com.nis.web.security.UserUtils; @@ -1081,4 +1090,327 @@ public class WebsiteController extends BaseController { // return "redirect:" + adminPath // +"/ntc/website/httpList?functionId="+entity.getFunctionId(); } + @RequestMapping(value = {"dnsImport","sslImport"}, method=RequestMethod.POST) + public String importDns(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + ImportBigExcel ei=null; + try { + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + BlockingQueue ipPortCfgs =null; + BlockingQueue> stringCfgs =null; + BlockingQueue complexkeywordCfgs =null; + List cfgIndexInfos = new ArrayList(); + Properties properties=this.getMsgProp(); + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + ei = new ImportBigExcel(file, 0, 1); + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + //------------------------------------check format start---------------------------- + if (regionDict.getRegionType().equals(1)) {// IP + if(regionDict.getFunctionId().intValue()==7&&serviceDict.getAction().intValue()==16) { + //加载模板 + ei.loadInitParams(DnsIpTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(DnsIpTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + }else if(regionDict.getFunctionId().intValue()==34&&serviceDict.getAction().intValue()==16) { + //加载模板 + ei.loadInitParams(BlackListIPTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(BlackListIPTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + }else { + //加载模板 + ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpAllTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + } + }else if (regionDict.getRegionType().equals(2)) { + if(regionDict.getFunctionId().intValue()==7&&serviceDict.getAction().intValue()==16) { + ei.loadInitParams(DnsStringTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(DnsStringTemplate.class ); + stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list); + }else if(regionDict.getFunctionId().intValue()==34&&serviceDict.getAction().intValue()==16) { + ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(BlackListStringTemplate.class ); + stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list); + }else { + ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(StringAllTemplate.class ); + stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list); + } + + }else if (regionDict.getRegionType().equals(3)) { + if(serviceDict.getAction().intValue()==16) { + ei.loadInitParams(DnsComplexStringTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(DnsComplexStringTemplate.class); + complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list); + }else { + ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(ComplexStringAllTemplate.class); + complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list); + } + } + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + //------------------------------------check format end---------------------------- + Date date = new Date(); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + if (regionDict.getRegionType().equals(1)) {// IP + List _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + if(!regionDict.getFunctionId().equals(405)) {//app ip compileId 从config_group_info中取 + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + }else { + try { + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取域ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + if(cfg.getDnsStrategyId()!=null) { + cfgIndexInfo.setDnsStrategyId(Long.parseLong(cfg.getDnsStrategyId().toString())); + } + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + websiteCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1")); + cfgIndexInfos.clear(); + _ipPortCfgs.clear(); + } + }else if (regionDict.getRegionType().equals(2)) {//账号 + List> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!stringCfgs.isEmpty()) { + stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_stringCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_stringCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_stringCfgs.size()); + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseStringCfg cfg : _stringCfgs) { + cfg.setAction(serviceDict.getAction()); + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_stringCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_stringCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict.getServiceId()); + if(compileIds!=null&&compileIds.size()==_stringCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo, new String[] {"cfgId"}); + if(cfg.getDnsStrategyId()!=null) { + cfgIndexInfo.setDnsStrategyId(Long.parseLong(cfg.getDnsStrategyId().toString())); + } + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + websiteCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1")); + cfgIndexInfos.clear(); + _stringCfgs.clear(); + } + } else if (regionDict.getRegionType().equals(3)) {//dns + List _complexkeywordCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!complexkeywordCfgs.isEmpty()) { + complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_complexkeywordCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_complexkeywordCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_complexkeywordCfgs.size()); + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (ComplexkeywordCfg cfg : _complexkeywordCfgs) { + cfg.setAction(serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_complexkeywordCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_complexkeywordCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + //cfg.setIsAudit(0); + //cfg.setIsValid(0); + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict.getServiceId()); + if(compileIds!=null&&compileIds.size()==_complexkeywordCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + if(cfg.getDnsStrategyId()!=null) { + cfgIndexInfo.setDnsStrategyId(Long.parseLong(cfg.getDnsStrategyId().toString())); + } + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + websiteCfgService.saveAndSend(regionDict, cfgIndexInfos, _complexkeywordCfgs, isSend.equals("1")); + cfgIndexInfos.clear(); + _complexkeywordCfgs.clear(); + } + } + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } } diff --git a/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java b/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java index fa5615f78..b0d533ca0 100644 --- a/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java +++ b/src/main/java/com/nis/web/controller/configuration/ntc/WhiteListController.java @@ -6,30 +6,44 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import com.beust.jcommander.internal.Lists; +import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.HttpUrlCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; +import com.nis.domain.configuration.template.IpWhitelistTemplate; import com.nis.domain.configuration.template.WhiteListIpTemplate; import com.nis.exceptions.MaatConvertException; +import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; +import com.nis.util.DictUtils; import com.nis.util.StringUtil; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.configuration.CommonController; import com.nis.web.security.UserUtils; @@ -169,7 +183,7 @@ public class WhiteListController extends CommonController { initPageCondition(model, cfg); return "/cfg/whitelist/domainList"; } - + @RequestMapping(value = { "saveHttpUrlCfgs" }) public String saveHttpUrlCfgs(RedirectAttributes model, HttpServletRequest request, HttpServletResponse response, CfgIndexInfo entity) { @@ -338,7 +352,147 @@ public class WhiteListController extends CommonController { this._importFileTemplate(request, response, redirectAttributes, functionId, cfgRegionCode, WhiteListIpTemplate.class); } - + @RequestMapping(value = "ip/import", method=RequestMethod.POST) + public String importIPWhiteList(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + BlockingQueue ipPortCfgs =null; + List cfgIndexInfos = new ArrayList(); + ImportBigExcel ei=null; + Properties properties=this.getMsgProp(); + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + try { + ei = new ImportBigExcel(file, 0, 1); + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + //加载模板 + ei.loadInitParams(IpWhitelistTemplate.class, properties, regionDict, serviceDict); + //------------------------------------check format start---------------------------- + BlockingQueue list = ei.getDataList(IpWhitelistTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + //------------------------------------check format end---------------------------- + Date date = new Date(); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + List _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + logger.info("获取编译ID出错",e); + e.printStackTrace(); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + /*cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date);*/ + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + //cfg.setDoLog(2); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + if(regionDict.getFunctionId().equals(405)&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setUserRegion1(regionIds.get(ind).toString()); + } + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + ind++; + } + ipCfgService.saveAndSendIPList(regionDict, serviceDict, _ipPortCfgs, cfgIndexInfos,isSend.equals("1")); + cfgIndexInfos.clear(); + _ipPortCfgs.clear(); + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } + + } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } // ip配置导出 @RequestMapping(value = "ip/export") public void exportIp(String columns, Model model, HttpServletRequest request, HttpServletResponse response, diff --git a/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java b/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java index 820f03c81..58bbc0987 100644 --- a/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java +++ b/src/main/java/com/nis/web/controller/configuration/proxy/InterceptController.java @@ -8,20 +8,30 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.BlockingQueue; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; +import org.jets3t.service.ServiceException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import com.beust.jcommander.internal.Lists; +import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.basics.AsnGroupInfo; import com.nis.domain.basics.PolicyGroupInfo; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.HttpUrlCfg; @@ -29,13 +39,22 @@ import com.nis.domain.configuration.InterceptPktBin; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.PxyObjKeyring; import com.nis.domain.configuration.PxyObjSpoofingIpPool; +import com.nis.domain.configuration.template.IpAllNotDoLogTemplate; +import com.nis.domain.configuration.template.IpAllTemplate; +import com.nis.domain.configuration.template.IpPayloadTemplate; +import com.nis.domain.configuration.template.IpRateLimitTemplate; +import com.nis.domain.configuration.template.IpSpoofingTemplate; import com.nis.exceptions.MaatConvertException; +import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.DictUtils; import com.nis.util.StringUtil; +import com.nis.util.excel.ImportBigExcel; import com.nis.web.controller.configuration.CommonController; import com.nis.web.security.UserUtils; +import jersey.repackaged.com.google.common.collect.Maps; + /** * IP相关配置控制类 * @@ -250,7 +269,153 @@ public class InterceptController extends CommonController { * redirectAttributes){ this._exportIp(columns,model, request, response, * entity, ids, redirectAttributes); } */ - + @RequestMapping(value = {"/ippayload/import","/ip/import"}, method=RequestMethod.POST) + public String importIPList(HttpServletRequest request,HttpServletResponse response,RedirectAttributes redirectAttributes, + @RequestParam("files") MultipartFile[] files + ,Integer serviceDictId + ,Integer requestId + ,String attribute + ,String classify + ,String regionDictIds + ,String importPath) { + logger.warn("import start..."); + long start=System.currentTimeMillis(); + FunctionServiceDict serviceDict = DictUtils.getFunctionServiceDict(serviceDictId); + StringBuffer errTip=new StringBuffer(); + BlockingQueue ipPortCfgs =null; + List cfgIndexInfos = new ArrayList(); + ImportBigExcel ei=null; + Properties properties=this.getMsgProp(); + for (int i = 0; i < files.length; i++) { + MultipartFile file = files[i]; + FunctionRegionDict regionDict = DictUtils + .getFunctionRegionDict(Integer.parseInt(regionDictIds.split(",")[i])); + try { + ei = new ImportBigExcel(file, 0, 1); + //------------------------------------check format start---------------------------- + if (regionDict.getFunctionId().equals(212)) { + //加载模板 + ei.loadInitParams(IpPayloadTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpPayloadTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list); + } else if(regionDict.getFunctionId().equals(214)) { // IpSpoofing + //加载模板 + ei.loadInitParams(IpSpoofingTemplate.class, properties, regionDict, serviceDict); + BlockingQueue list = ei.getDataList(IpSpoofingTemplate.class ); + ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list); + } + //------------------------------------check format end---------------------------- + //删除文件 + if(ei.getUploadFile()!=null&&ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + Date date = new Date(); + String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend"); + List _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); + while(!ipPortCfgs.isEmpty()) { + ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE); + List compileIds=Lists.newArrayList(); + List regionIds=Lists.newArrayList(); + List groupIds=Lists.newArrayList(); + List numRegionGroupIds=Lists.newArrayList(); + List numRegionRegionIds=Lists.newArrayList(); + try { + compileIds = ConfigServiceUtil.getId(1,_ipPortCfgs.size()); + if(isSend.equals("1")) { + groupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + //需要获取数值域的id + if(serviceDict!=null&&serviceDict.getProtocolId()!=null&&serviceDict.getProtocolId()>0) { + numRegionGroupIds = ConfigServiceUtil.getId(2,_ipPortCfgs.size()); + numRegionRegionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size()); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int ind=0; + for (BaseIpCfg cfg : _ipPortCfgs) { + cfg.setAction(serviceDict==null?null:serviceDict.getAction()); + cfg.setCfgRegionCode(regionDict.getConfigRegionCode()); + cfg.setCfgType(regionDict.getConfigRegionValue()); + cfg.setCreateTime(date); + cfg.setCreatorId(UserUtils.getUser().getId()); + cfg.setFunctionId(regionDict.getFunctionId()); + if(isSend.equals("1")) { + cfg.setIsAudit(Constants.AUDIT_YES); + cfg.setIsValid(Constants.VALID_YES); + cfg.setAuditorId(UserUtils.getUser().getId()); + cfg.setAuditTime(date); + if(groupIds!=null&&groupIds.size()==_ipPortCfgs.size()) { + cfg.setGroupId(groupIds.get(ind)); + } + if(regionIds!=null&®ionIds.size()==_ipPortCfgs.size()) { + cfg.setRegionId(regionIds.get(ind)); + } + if(serviceDict!=null&&serviceDict.getProtocolId()!=null) { + if(numRegionGroupIds!=null&&numRegionGroupIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionGroupId(numRegionGroupIds.get(ind)); + } + if(numRegionRegionIds!=null&&numRegionRegionIds.size()==_ipPortCfgs.size()) { + cfg.setNumberRegionRegionId(numRegionRegionIds.get(ind)); + } + } + }else { + cfg.setIsAudit(Constants.AUDIT_NOT_YET); + cfg.setIsValid(Constants.VALID_NO); + } + cfg.setIsAreaEffective(0); + cfg.setLable("0"); + cfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); + cfg.setAttribute(attribute); + cfg.setClassify(classify); + cfg.setServiceId(serviceDict==null?null:serviceDict.getServiceId()); + cfg.setTableName("ip_port_cfg"); + if(compileIds.size()==_ipPortCfgs.size()) { + cfg.setCompileId(compileIds.get(ind)); + } + if(serviceDict.getFunctionId().equals(212)) {// IP Payload + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + } + ind++; + } + if(serviceDict.getFunctionId().equals(214)) {// IpSpoofing + interceptCfgService.saveAndSendSpoofingIpPool(_ipPortCfgs, cfgIndexInfos,isSend.equals("1")); + }else { + interceptCfgService.saveAndSendIPList(regionDict, serviceDict, _ipPortCfgs, cfgIndexInfos,isSend.equals("1")); + } + cfgIndexInfos.clear(); + _ipPortCfgs.clear(); + } + if(errTip.toString().length()>0) { + addMessage(redirectAttributes,"error", errTip.toString()); + } + } catch (Exception e) { + if(ei!=null) { + if(ei.getUploadFile().exists()) { + ei.getUploadFile().delete(); + } + } + if(e instanceof MaatConvertException) { + addMessage(redirectAttributes,"error", "request_service_failed"); + }else if(e instanceof ServiceException) { + addMessage(redirectAttributes,"error", e.getMessage()); + }else if(e instanceof IndexOutOfBoundsException){ + addMessage(redirectAttributes,"error", "template_error"); + }else { + addMessage(redirectAttributes,"error", "import_failed"); + } + e.printStackTrace(); + } + } + long end=System.currentTimeMillis(); + logger.warn("import finish,cost:"+(end-start)); + return "redirect:" + adminPath+ importPath; + } // ip配置导出 @RequestMapping(value = "exportIpAddr") public void exportIpAddr(Model model, HttpServletRequest request, HttpServletResponse response, diff --git a/src/main/java/com/nis/web/service/BaseService.java b/src/main/java/com/nis/web/service/BaseService.java index af2fed8a0..c81426e72 100644 --- a/src/main/java/com/nis/web/service/BaseService.java +++ b/src/main/java/com/nis/web/service/BaseService.java @@ -65,9 +65,7 @@ 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.IpReusePolicyCfg; -import com.nis.domain.configuration.NtcSubscribeIdCfg; import com.nis.domain.configuration.PxyObjKeyring; import com.nis.domain.configuration.PxyObjSpoofingIpPool; import com.nis.domain.configuration.PxyObjTrustedCaCert; @@ -108,7 +106,6 @@ import com.nis.web.dao.configuration.StringCfgDao; import com.nis.web.dao.specific.ConfigGroupInfoDao; import com.nis.web.dao.specific.SpecificServiceCfgDao; import com.nis.web.security.UserUtils; -import com.nis.web.service.basics.AsnGroupInfoService; import com.nis.web.service.basics.SysDictInfoService; /** @@ -1619,6 +1616,7 @@ public abstract class BaseService { } return maatCfg; } + /** * 分割并保存 * @param regionDict @@ -2342,34 +2340,36 @@ public abstract class BaseService { SqlSession batchSqlSession = null; List configCompileList = new ArrayList(); try{ + //单独创建一个AppPolicyCfg 并赋值,appPolicyCfgs 中的isValid,isAudit会在 insertAppPolicyCfgForBatch之后改变值 + AppPolicyCfg app=new AppPolicyCfg(); + BeanUtils.copyProperties(appPolicyCfgs.get(0), app); batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < appPolicyCfgs.size();index++){ AppPolicyCfg _cfg = appPolicyCfgs.get(index); ((AppCfgDao) batchSqlSession.getMapper(AppCfgDao.class)).insertAppPolicyCfgForBatch(_cfg); - } if(send) { StringBuffer cfgKeywords = new StringBuffer(); if (appPolicyCfgs.get(0).getBehavCode() != null) { if (regionDict.getFunctionId().equals(63)) { - cfgKeywords.append(Constants.APP_ID_REGION + "=" + appPolicyCfgs.get(0).getAppCode()); + cfgKeywords.append(Constants.APP_ID_REGION + "=" + app.getAppCode()); } else if (regionDict.getFunctionId().equals(407) || regionDict.getFunctionId().equals(408)) { - cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + appPolicyCfgs.get(0).getAppCode()); + cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + app.getAppCode()); } cfgKeywords.append(Constants.KEYWORD_EXPR); - cfgKeywords.append(Constants.BEHAV_ID_REGION + "=" + appPolicyCfgs.get(0).getBehavCode()); + cfgKeywords.append(Constants.BEHAV_ID_REGION + "=" + app.getBehavCode()); // appPolicyCfgs.get(0.setCfgKeywords(appPolicyCfgs.get(0.getAppCode()+Constants.KEYWORD_EXPR+appPolicyCfgs.get(0.getBehavCode()); } else { if (regionDict.getFunctionId().equals(63)) { - cfgKeywords.append(Constants.APP_ID_REGION + "=" + appPolicyCfgs.get(0).getAppCode()); + cfgKeywords.append(Constants.APP_ID_REGION + "=" + app.getAppCode()); } else if (regionDict.getFunctionId().equals(407) || regionDict.getFunctionId().equals(408)) { - cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + appPolicyCfgs.get(0).getAppCode()); + cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + app.getAppCode()); } // entity.setCfgKeywords(entity.getAppCode()+""); } - appPolicyCfgs.get(0).setCfgKeywords(cfgKeywords.toString()); + app.setCfgKeywords(cfgKeywords.toString()); } List groupIds=Lists.newArrayList(); List regionIds=Lists.newArrayList(); @@ -2381,7 +2381,7 @@ public abstract class BaseService { MaatCfg maatCfg=null; if(send) { if(regionDict.getIsMaat().intValue()==1) { - AppPolicyCfg cfg=(AppPolicyCfg) appPolicyCfgs.get(0); + AppPolicyCfg cfg=app; cfg.setCompileId(list.get(index).getCompileId()); cfg.setRegionId(regionIds.get(index)); cfg.setGroupId(groupIds.get(index)); @@ -2533,6 +2533,7 @@ public abstract class BaseService { * @param data * @param tableName */ + @Deprecated @Transactional(readOnly = false, rollbackFor = RuntimeException.class) public void saveIpBatch(FunctionRegionDict regionDict, FunctionServiceDict serviceDict,List cfgs, boolean send) { if (regionDict != null) { @@ -2939,6 +2940,8 @@ public abstract class BaseService { * @param cfgIndexInfos * @param send */ + @Deprecated + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void saveAndSendSpoofingIpPool(List list, List cfgIndexInfos, boolean send) { List ipCfgList = (List)list; List spoofingPoolIds=Lists.newArrayList(); @@ -3012,7 +3015,9 @@ public abstract class BaseService { index ++; } - +// if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { +// this.saveCfgIndexOf(cfgIndexInfos); +// } if(send && spoofingPools.size()>0) { //调用服务接口下发配置数据 String json=gsonToJson(spoofingPools); diff --git a/src/main/java/com/nis/web/service/configuration/AppCfgService.java b/src/main/java/com/nis/web/service/configuration/AppCfgService.java index b9fbdb340..43807ca9d 100644 --- a/src/main/java/com/nis/web/service/configuration/AppCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/AppCfgService.java @@ -1,6 +1,5 @@ package com.nis.web.service.configuration; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -14,10 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.google.common.collect.Lists; import com.nis.domain.Page; -import com.nis.domain.basics.AsnIpCfg; -import com.nis.domain.basics.Varibles; import com.nis.domain.configuration.AppByteCfg; import com.nis.domain.configuration.AppDomainCfg; import com.nis.domain.configuration.AppHeaderCfg; @@ -28,9 +24,7 @@ import com.nis.domain.configuration.AppSslCertCfg; import com.nis.domain.configuration.AppTcpCfg; import com.nis.domain.configuration.AppTopicDomainCfg; import com.nis.domain.configuration.AreaIpCfg; -import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; -import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; @@ -50,7 +44,6 @@ import com.nis.domain.specific.SpecificServiceCfg; import com.nis.exceptions.MaatConvertException; import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; -import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.util.StringUtils; import com.nis.web.dao.basics.AsnIpCfgDao; @@ -2122,5 +2115,5 @@ public class AppCfgService extends BaseService { appCfgDao.saveDomainDict(websiteDomainTopic); } - + } diff --git a/src/main/java/com/nis/web/service/configuration/BgpCfgService.java b/src/main/java/com/nis/web/service/configuration/BgpCfgService.java index 954776b36..a940dec66 100644 --- a/src/main/java/com/nis/web/service/configuration/BgpCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/BgpCfgService.java @@ -8,9 +8,13 @@ import java.util.Map; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.nis.domain.FunctionRegionDict; import com.nis.domain.Page; import com.nis.domain.configuration.AreaIpCfg; +import com.nis.domain.configuration.BaseCfg; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.IpPortCfg; @@ -30,8 +34,10 @@ import com.nis.util.Constants; import com.nis.util.StringUtil; import com.nis.web.dao.configuration.AreaIpCfgDao; import com.nis.web.dao.configuration.BgpCfgDao; +import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.configuration.StringCfgDao; import com.nis.web.security.UserUtils; +import com.nis.web.service.BaseService; import com.nis.web.service.CrudService; /** @@ -47,6 +53,8 @@ public class BgpCfgService extends CrudService { protected StringCfgDao stringCfgDao; @Autowired protected AreaIpCfgDao areaIpCfgDao; + @Autowired + protected IpCfgDao ipCfgDao; public CfgIndexInfo getBgpCfg(Long cfgId,Integer compileId){ CfgIndexInfo entity = bgpCfgDao.getCfgIndexInfo(cfgId,compileId); @@ -419,4 +427,66 @@ public class BgpCfgService extends CrudService { logger.info("BGP配置取消配置响应信息:"+result.getMsg()); } } + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAndSend(FunctionRegionDict regionDict,List cfgIndexInfos,List> data,boolean send) { + if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { + this.saveCfgIndexOf(cfgIndexInfos); + } + if(data!=null&&!data.isEmpty()) { + List configCompileList = new ArrayList(); + if(data.get(0) instanceof BaseIpCfg) { + for (int index = 0; index < data.size(); index++) { + BaseIpCfg cfg =(BaseIpCfg)data.get(index); + ipCfgDao.insertForBatch(cfg); + if (send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(cfg,1); + //userregion处理 + configCompileList.add(maatCfg); + } + } + } + }else if(data.get(0) instanceof BaseStringCfg) { + for (int index = 0; index < data.size(); index++) { + BaseStringCfg cfg = (BaseStringCfg)data.get(index); + if(cfg.getCfgKeywords()!=null && !"".equals(cfg.getCfgKeywords())){ + cfg.setTableName("ntc_bgp_as_cfg"); + stringCfgDao.saveStringCfgBatch(cfg); + } + if (send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(cfg,2); + //userregion处理 + configCompileList.add(maatCfg); + } + + } + } + + } + if (send && configCompileList.size() > 0) { + ToMaatBean maatBean = new ToMaatBean(); + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + long start=System.currentTimeMillis(); + // 调用服务接口下发配置数据 + String json = BaseService.gsonToJson(maatBean); + if(configCompileList.size()>10) { + logger.info("bgp配置下发配置条数:" + configCompileList.size()); + }else { + logger.info("bgp配置下发配置参数:" + json); + } + // 调用服务接口下发配置 + ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); + logger.info("bgp配置下发响应信息:" + result.getMsg()); + long end=System.currentTimeMillis(); + logger.info("bgp配置下发配置耗时:" + (end-start)); + + } + } + + } } diff --git a/src/main/java/com/nis/web/service/configuration/InterceptCfgService.java b/src/main/java/com/nis/web/service/configuration/InterceptCfgService.java index 532dff991..742a98d1f 100644 --- a/src/main/java/com/nis/web/service/configuration/InterceptCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/InterceptCfgService.java @@ -7,12 +7,22 @@ import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.google.common.collect.Lists; +import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; +import com.nis.domain.callback.InlineIp; import com.nis.domain.configuration.AreaIpCfg; +import com.nis.domain.configuration.BaseCfg; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.HttpUrlCfg; @@ -20,25 +30,26 @@ import com.nis.domain.configuration.InterceptPktBin; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.PxyObjSpoofingIpPool; import com.nis.domain.maat.MaatCfg; -import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; -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.domain.specific.ConfigGroupInfo; +import com.nis.domain.maat.ToMaatBean; +import com.nis.domain.maat.ToMaatResult; import com.nis.exceptions.MaatConvertException; import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.StringUtil; import com.nis.web.dao.configuration.AreaIpCfgDao; import com.nis.web.dao.configuration.InterceptCfgDao; +import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.configuration.PxyObjSpoofingIpPoolDao; import com.nis.web.dao.configuration.WebsiteCfgDao; import com.nis.web.security.UserUtils; import com.nis.web.service.BaseService; import com.nis.web.service.CrudService; +import com.nis.web.service.SpringContextHolder; /** * 网站相关配置事务类 @@ -55,7 +66,8 @@ public class InterceptCfgService extends CrudService protected AreaIpCfgDao areaIpCfgDao; @Autowired protected PxyObjSpoofingIpPoolDao pxyObjSpoofingIpPoolDao; - + @Autowired + protected IpCfgDao ipCfgDao; public CfgIndexInfo getInterceptCfg(Long cfgId,Integer compileId){ CfgIndexInfo entity = websiteCfgDao.getCfgIndexInfo(cfgId,compileId); List ipPortList = websiteCfgDao.getIpPortList(entity); @@ -578,4 +590,242 @@ public class InterceptCfgService extends CrudService logger.info("intercept IP/DNS 配置取消配置响应信息:"+result.getMsg()); } } + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAndSendIPList(FunctionRegionDict regionDict, FunctionServiceDict serviceDict,List list,List cfgIndexInfos,boolean send) { + if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { + this.saveCfgIndexOf(cfgIndexInfos); + } + Integer regionType = regionDict.getRegionType(); + if (1 == regionType.intValue()) { + SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); + SqlSession batchSqlSession = null; + List configCompileList = new ArrayList(); + List callbackIpList = new ArrayList(); + try{ + batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + for(int index = 0; index < list.size();index++){ + BaseIpCfg _cfg = list.get(index); + batchSqlSession.getMapper(IpCfgDao.class).insertForBatch(_cfg); + if(send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(_cfg,1); + //userregion处理 + if(regionDict.getFunctionId()==212) { + String userRegion=Constants.REPLACE_ZONE_KEY+"="+_cfg.getUserRegion1(); + String substitute=""; + String userRegion2=StringUtil.isEmpty(_cfg.getUserRegion2()) ? "":_cfg.getUserRegion2(); + substitute="/"; + userRegion2 = BaseService.replaceContentEscape(userRegion2); + substitute=substitute+userRegion2; + + String userRegion3=StringUtil.isEmpty(_cfg.getUserRegion3()) ? "":_cfg.getUserRegion3(); + userRegion3 = BaseService.replaceContentEscape(userRegion3); + substitute=substitute+"/"+userRegion3; + + userRegion=userRegion+";"+Constants.REPLACE_SUBSTITUTE_KEY+"="+substitute; + maatCfg.setUserRegion(userRegion); + } + configCompileList.add(maatCfg); + }else { + //根据具体情况判断 + callbackIpList.add(this.convertCallBackIp(_cfg,_cfg.getDnsStrategyId())); + } + } + } + long start=System.currentTimeMillis(); + long end=System.currentTimeMillis(); + if (send) { + if(configCompileList.size() > 0) { + ToMaatBean maatBean = new ToMaatBean(); + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + start=System.currentTimeMillis(); + // 调用服务接口下发配置数据 + String json = BaseService.gsonToJson(maatBean); + if(configCompileList.size()>10) { + logger.info("IP 配置下发配置条数:" + configCompileList.size()); + }else { + logger.info("IP 配置下发配置参数:" + json); + } + // 调用服务接口下发配置 + + ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); + logger.info("IP 配置下发响应信息:" + result.getMsg()); + end=System.currentTimeMillis(); + logger.info("IP 配置下发配置耗时:" + (end-start)); + }else { + //调用服务接口下发配置数据 + String json=gsonToJson(callbackIpList); + logger.info("IP配置下发配置参数:"+json); + //调用服务接口下发配置 + try { + ToMaatResult result = ConfigServiceUtil.postCallbackCfg(json); + if(result!=null){ + logger.info("IP配置配置下发响应信息:"+result.getMsg()); + } + } catch (Exception e) { + logger.error("IP配置配置下发失败",e); + throw e; + } + } + } + batchSqlSession.commit(); + }finally { + if(batchSqlSession != null){ + batchSqlSession.close(); + } + } + } + } + /** + * 处理IpSpoofing配置导入 + * @param list + * @param cfgIndexInfos + * @param send + */ + @Override + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAndSendSpoofingIpPool(List list, List cfgIndexInfos, boolean send) { + List ipCfgList = (List)list; + List spoofingPoolIds=Lists.newArrayList(); + List spoofingPools = new ArrayList(); + PxyObjSpoofingIpPoolDao pxyObjSpoofingIpPoolDao = SpringContextHolder.getBean(PxyObjSpoofingIpPoolDao.class); + + try { + spoofingPoolIds = ConfigServiceUtil.getId(1,ipCfgList.size()); + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取编译ID出错"); + throw new MaatConvertException(":"+e.getMessage()); + } + int index = 0; + List configCompileList = new ArrayList(); + for (BaseIpCfg cfg : ipCfgList) { + // 保存IP仿冒池 + PxyObjSpoofingIpPool spoofingPool = new PxyObjSpoofingIpPool(); + spoofingPool.setIpType(4);//ipv4 + spoofingPool.setIpAddress(cfg.getUserRegion2());//仿冒IP + spoofingPool.setProtocol(0); + if("dnat".equals(cfg.getUserRegion1().toLowerCase())){//spoofing server ip->dnat + spoofingPool.setDirection(1); + }else{ + spoofingPool.setDirection(2);//spoofing client ip->snat + } + spoofingPool.setPort("0"); + spoofingPool.setUserRegion("0"); + spoofingPool.setLocation(0); + spoofingPool.setServiceId(642); + spoofingPool.setAreaEffectiveIds("0"); + spoofingPool.setIsAreaEffective(0); + spoofingPool.setCreateTime(cfg.getCreateTime()); + spoofingPool.setCreatorId(UserUtils.getUser().getId()); + if(spoofingPoolIds.size() == ipCfgList.size()) { + spoofingPool.setCompileId(spoofingPoolIds.get(index)); + } + spoofingPool.setAction(1); + spoofingPool.setFunctionId(666); + spoofingPool.setRequestId(0); + if(send) { + spoofingPool.setIsAudit(Constants.AUDIT_YES); + spoofingPool.setIsValid(Constants.VALID_YES); + spoofingPool.setAuditorId(UserUtils.getUser().getId()); + spoofingPool.setAuditTime(cfg.getAuditTime()); + + }else { + spoofingPool.setIsValid(Constants.VALID_NO); + spoofingPool.setIsAudit(Constants.AUDIT_NOT_YET); + + } + pxyObjSpoofingIpPoolDao.insert(spoofingPool);//保存仿冒IP池配置 + cfg.setUserRegion3(String.valueOf(spoofingPool.getCfgId()));//将仿冒IP池配置ID作为策略组ID + if(send) { + //地址池处理 + PxyObjSpoofingIpPool pool=new PxyObjSpoofingIpPool(); + pool.setCfgId(Long.valueOf(cfg.getUserRegion3())); + pool.setIsValid(cfg.getIsValid()); + pool.setIsAudit(cfg.getIsAudit()); + pool.setAuditorId(UserUtils.getUser().getId()); + pool.setAuditTime(cfg.getAuditTime()); + pxyObjSpoofingIpPoolDao.update(pool); + + spoofingPool.setAreaEffectiveIds("0"); + spoofingPool.setGroupId(spoofingPool.getCfgId().intValue()); + spoofingPools.add(spoofingPool); + // ip_port_cfg处理 + MaatCfg maatCfg=convertMaatCfg(cfg,1); + //userregion处理 + String userRegion="nat_type="+cfg.getUserRegion1()+";spoofing_ip_pool="+cfg.getUserRegion3(); + maatCfg.setUserRegion(userRegion); + configCompileList.add(maatCfg); + } + + CfgIndexInfo cfgIndexInfo = new CfgIndexInfo(); + BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"}); + cfgIndexInfos.add(cfgIndexInfo); + index ++; + } + if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { + this.saveCfgIndexOf(cfgIndexInfos); + } + this.saveIpPortCfg(ipCfgList); + if(send) { + if(spoofingPools.size()>0) { + //调用服务接口下发配置数据 + String json=gsonToJson(spoofingPools); + if(spoofingPools.size()>10) { + logger.info("欺骗IP池配置下发配置条数:" + spoofingPools.size()); + }else { + logger.info("欺骗IP池配置下发配置参数:" + json); + } + //调用服务接口下发配置 + try { + ToMaatResult result = ConfigServiceUtil.postCallbackCfg(json); + if(result!=null){ + logger.info("欺骗IP池配置下发响应信息:"+result.getMsg()); + } + } catch (Exception e) { + logger.error("欺骗IP池配置配置下发失败",e); + throw e; + } + } + if(configCompileList.size() > 0) { + ToMaatBean maatBean = new ToMaatBean(); + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + // 调用服务接口下发配置数据 + String json = BaseService.gsonToJson(maatBean); + if(configCompileList.size()>10) { + logger.info("IP 配置下发配置条数:" + configCompileList.size()); + }else { + logger.info("IP 配置下发配置参数:" + json); + } + // 调用服务接口下发配置 + + ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); + logger.info("IP 配置下发响应信息:" + result.getMsg()); + } + } + } + protected void saveIpPortCfg(List ipCfgList) { + SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); + SqlSession batchSqlSession = null; + try{ + batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + for(int index = 0; index < ipCfgList.size();index++){ + BaseIpCfg baseIpCfg = ipCfgList.get(index); + ((IpCfgDao) batchSqlSession.getMapper(IpCfgDao.class)).insertForBatch(baseIpCfg); + } + batchSqlSession.commit(); + }finally { + if(batchSqlSession != null){ + batchSqlSession.close(); + } + } + } } diff --git a/src/main/java/com/nis/web/service/configuration/IpCfgService.java b/src/main/java/com/nis/web/service/configuration/IpCfgService.java index af1ab9204..2682f814f 100644 --- a/src/main/java/com/nis/web/service/configuration/IpCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/IpCfgService.java @@ -2,26 +2,36 @@ package com.nis.web.service.configuration; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.google.gson.Gson; import com.nis.domain.FunctionRegionDict; +import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; import com.nis.domain.basics.AsnGroupInfo; import com.nis.domain.callback.InlineIp; +import com.nis.domain.configuration.AppIpCfg; import com.nis.domain.configuration.AreaIpCfg; import com.nis.domain.configuration.AsnKeywordCfg; +import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.domain.configuration.DdosIpCfg; +import com.nis.domain.configuration.DnsIpCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; import com.nis.domain.maat.MaatCfg; @@ -40,12 +50,17 @@ import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.web.dao.basics.AsnGroupInfoDao; import com.nis.web.dao.basics.AsnIpCfgDao; +import com.nis.web.dao.configuration.AppMultiFeatureCfgDao; import com.nis.web.dao.configuration.AreaIpCfgDao; +import com.nis.web.dao.configuration.DdosCfgDao; +import com.nis.web.dao.configuration.DnsIpCfgDao; import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.configuration.StringCfgDao; import com.nis.web.dao.specific.ConfigGroupInfoDao; import com.nis.web.security.UserUtils; +import com.nis.web.service.BaseService; import com.nis.web.service.CrudService; +import com.nis.web.service.SpringContextHolder; /** * IP相关配置事务类 @@ -264,6 +279,91 @@ public class IpCfgService extends CrudService { } } } + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAndSendIPList(FunctionRegionDict regionDict, FunctionServiceDict serviceDict,List list,List cfgIndexInfos,boolean send) { + if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { + this.saveCfgIndexOf(cfgIndexInfos); + } + Integer regionType = regionDict.getRegionType(); + if (1 == regionType.intValue()) { + SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); + SqlSession batchSqlSession = null; + List configCompileList = new ArrayList(); + List callbackIpList = new ArrayList(); + try{ + batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + for(int index = 0; index < list.size();index++){ + BaseIpCfg _cfg = list.get(index); + batchSqlSession.getMapper(IpCfgDao.class).insertForBatch(_cfg); + if(send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(_cfg,1); + //userregion处理 + //限速需要发Droprate=0.001 ,暂不支持Bandwidth=200kbps + if(_cfg.getAction().equals(Constants.RATELIMIT_ACTION)){ + if(_cfg.getUserRegion1().equals("0")){//丢包率 + _cfg.setUserRegion2(StringUtil.isEmpty(_cfg.getUserRegion2()) ? "":_cfg.getUserRegion2()); + maatCfg.setUserRegion(Constants.INTERCEPT_IP_RATELIMIT_DROPRATE_USER_REGION_KEY+"="+_cfg.getUserRegion2()); + }else if(_cfg.getUserRegion1().equals("1")){//带宽 + _cfg.setUserRegion3(StringUtil.isEmpty(_cfg.getUserRegion3()) ? "":_cfg.getUserRegion3()); + maatCfg.setUserRegion(Constants.INTERCEPT_IP_RATELIMIT_BANDWITH_USER_REGION_KEY+"="+_cfg.getUserRegion3()); + } + } + configCompileList.add(maatCfg); + }else { + //根据具体情况判断 + callbackIpList.add(this.convertCallBackIp(_cfg,_cfg.getDnsStrategyId())); + } + } + } + long start=System.currentTimeMillis(); + long end=System.currentTimeMillis(); + if (send) { + if(configCompileList.size() > 0) { + ToMaatBean maatBean = new ToMaatBean(); + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + start=System.currentTimeMillis(); + // 调用服务接口下发配置数据 + String json = BaseService.gsonToJson(maatBean); + if(configCompileList.size()>10) { + logger.info("IP 配置下发配置条数:" + configCompileList.size()); + }else { + logger.info("IP 配置下发配置参数:" + json); + } + // 调用服务接口下发配置 + + ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); + logger.info("IP 配置下发响应信息:" + result.getMsg()); + end=System.currentTimeMillis(); + logger.info("IP 配置下发配置耗时:" + (end-start)); + }else { + //调用服务接口下发配置数据 + String json=gsonToJson(callbackIpList); + logger.info("IP配置下发配置参数:"+json); + //调用服务接口下发配置 + try { + ToMaatResult result = ConfigServiceUtil.postCallbackCfg(json); + if(result!=null){ + logger.info("IP配置配置下发响应信息:"+result.getMsg()); + } + } catch (Exception e) { + logger.error("IP配置配置下发失败",e); + throw e; + } + } + } + batchSqlSession.commit(); + }finally { + if(batchSqlSession != null){ + batchSqlSession.close(); + } + } + } + } public void updateIpCfgValid(Integer isValid,String ids,Integer functionId){ String[] idArray = ids.split(","); for(String id :idArray){ diff --git a/src/main/java/com/nis/web/service/configuration/WebsiteCfgService.java b/src/main/java/com/nis/web/service/configuration/WebsiteCfgService.java index edab676ee..1120f4bb8 100644 --- a/src/main/java/com/nis/web/service/configuration/WebsiteCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/WebsiteCfgService.java @@ -10,9 +10,13 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.nis.domain.FunctionRegionDict; import com.nis.domain.Page; import com.nis.domain.configuration.AreaIpCfg; +import com.nis.domain.configuration.BaseCfg; +import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.ComplexkeywordCfg; @@ -39,9 +43,11 @@ import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.web.dao.basics.ServiceDictInfoDao; import com.nis.web.dao.configuration.AreaIpCfgDao; +import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.configuration.StringCfgDao; import com.nis.web.dao.configuration.WebsiteCfgDao; import com.nis.web.security.UserUtils; +import com.nis.web.service.BaseService; import com.nis.web.service.CrudService; /** @@ -58,6 +64,8 @@ public class WebsiteCfgService extends CrudService { @Autowired protected StringCfgDao stringCfgDao; @Autowired + protected IpCfgDao ipCfgDao; + @Autowired private ServiceDictInfoDao serviceDictInfoDao; public CfgIndexInfo getCfgIndexInfo(Integer compileId){ @@ -1243,4 +1251,103 @@ public class WebsiteCfgService extends CrudService { logger.info("dns配置取消配置响应信息:"+result.getMsg()); } } + /** + * 配置导入,目前只支持单sheet + * @param regionDict + * @param cfgIndexInfos + * @param data + * @param send + */ + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAndSend(FunctionRegionDict regionDict,List cfgIndexInfos,List> data,boolean send) { + if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { + this.saveCfgIndexOf(cfgIndexInfos); + } + if(data!=null&&!data.isEmpty()) { + List configCompileList = new ArrayList(); + if(data.get(0) instanceof BaseIpCfg) { + for (int index = 0; index < data.size(); index++) { + BaseIpCfg cfg =(BaseIpCfg)data.get(index); + ipCfgDao.insertForBatch(cfg); + if (send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(cfg,1); + //userregion处理 + if(!StringUtil.isEmpty(cfg.getDnsStrategyId())){ + maatCfg.setUserRegion(Constants.DNS_STRATEGY_USER_REGION_KEY+"="+cfg.getDnsStrategyId()); + } + configCompileList.add(maatCfg); + } + } + } + }else if(data.get(0) instanceof BaseStringCfg) { + for (int index = 0; index < data.size(); index++) { + BaseStringCfg cfg = (BaseStringCfg)data.get(index); + if(cfg.getCfgKeywords()!=null && !"".equals(cfg.getCfgKeywords())){ + if("subscribe_id".equals(regionDict.getConfigServiceType())){ + cfg.setTableName("ntc_subscribe_id_cfg"); + }else { + cfg.setTableName("ssl_keyword_cfg"); + } + stringCfgDao.saveStringCfgBatch(cfg); + } + if (send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(cfg,2); + //userregion处理 + if(!StringUtil.isEmpty(cfg.getDnsStrategyId())){ + maatCfg.setUserRegion(Constants.DNS_STRATEGY_USER_REGION_KEY+"="+cfg.getDnsStrategyId()); + } + configCompileList.add(maatCfg); + } + + } + } + }else if(data.get(0) instanceof ComplexkeywordCfg) { + for (int index = 0; index < data.size(); index++) { + ComplexkeywordCfg cfg = (ComplexkeywordCfg)data.get(index); + if(cfg.getCfgKeywords()!=null && !"".equals(cfg.getCfgKeywords())){ + if(regionDict.getFunctionId().intValue()==7) { + cfg.setTableName("dns_domain_cfg"); + } + stringCfgDao.saveComplexkeywordCfgBatch(cfg); + } + if (send) { + if(regionDict.getIsMaat().intValue()==1) { + MaatCfg maatCfg=convertMaatCfg(cfg,3); + //userregion处理 + if(!StringUtil.isEmpty(cfg.getDnsStrategyId())){ + maatCfg.setUserRegion(Constants.DNS_STRATEGY_USER_REGION_KEY+"="+cfg.getDnsStrategyId()); + } + configCompileList.add(maatCfg); + } + + } + } + } + if (send && configCompileList.size() > 0) { + ToMaatBean maatBean = new ToMaatBean(); + maatBean.setConfigCompileList(configCompileList); + maatBean.setAuditTime(new Date()); + maatBean.setCreatorName(UserUtils.getUser().getName()); + maatBean.setVersion(Constants.MAAT_VERSION); + maatBean.setOpAction(Constants.INSERT_ACTION); + long start=System.currentTimeMillis(); + // 调用服务接口下发配置数据 + String json = BaseService.gsonToJson(maatBean); + if(configCompileList.size()>10) { + logger.info("dns/ssl配置下发配置条数:" + configCompileList.size()); + }else { + logger.info("dns/ssl配置下发配置参数:" + json); + } + // 调用服务接口下发配置 + ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); + logger.info("dns/ssl配置下发响应信息:" + result.getMsg()); + long end=System.currentTimeMillis(); + logger.info("dns/ssl配置下发配置耗时:" + (end-start)); + + } + } + + } } diff --git a/src/main/webapp/WEB-INF/include/excel/importModal.jsp b/src/main/webapp/WEB-INF/include/excel/importModal.jsp index 7de33313a..fd112cdc7 100644 --- a/src/main/webapp/WEB-INF/include/excel/importModal.jsp +++ b/src/main/webapp/WEB-INF/include/excel/importModal.jsp @@ -2,7 +2,7 @@ <%@ include file="/WEB-INF/include/taglib.jsp"%> + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/basicprotocol/list.jsp b/src/main/webapp/WEB-INF/views/cfg/basicprotocol/list.jsp index aaa0aafb8..574ccaa24 100644 --- a/src/main/webapp/WEB-INF/views/cfg/basicprotocol/list.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/basicprotocol/list.jsp @@ -566,6 +566,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/encryptedtunnelbehav/list.jsp b/src/main/webapp/WEB-INF/views/cfg/encryptedtunnelbehav/list.jsp index dbc1538aa..0f6ec0907 100644 --- a/src/main/webapp/WEB-INF/views/cfg/encryptedtunnelbehav/list.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/encryptedtunnelbehav/list.jsp @@ -564,6 +564,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/intercept/interceptList.jsp b/src/main/webapp/WEB-INF/views/cfg/intercept/interceptList.jsp index 644a47fd6..e1f082c63 100644 --- a/src/main/webapp/WEB-INF/views/cfg/intercept/interceptList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/intercept/interceptList.jsp @@ -663,6 +663,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp b/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp index 4ef3ad3c4..c89b1cf35 100644 --- a/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp @@ -538,6 +538,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/other/bgpList.jsp b/src/main/webapp/WEB-INF/views/cfg/other/bgpList.jsp index c2d505eb4..308b21b4d 100644 --- a/src/main/webapp/WEB-INF/views/cfg/other/bgpList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/other/bgpList.jsp @@ -530,6 +530,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/website/dnsList.jsp b/src/main/webapp/WEB-INF/views/cfg/website/dnsList.jsp index b6f689f79..e883c0bbb 100644 --- a/src/main/webapp/WEB-INF/views/cfg/website/dnsList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/website/dnsList.jsp @@ -534,6 +534,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/website/sslList.jsp b/src/main/webapp/WEB-INF/views/cfg/website/sslList.jsp index 1df1576c8..e81b16bd5 100644 --- a/src/main/webapp/WEB-INF/views/cfg/website/sslList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/website/sslList.jsp @@ -527,6 +527,7 @@ + <%@include file="/WEB-INF/include/excel/importModal.jsp" %> diff --git a/src/main/webapp/WEB-INF/views/cfg/whitelist/ipList.jsp b/src/main/webapp/WEB-INF/views/cfg/whitelist/ipList.jsp index b198df2e4..b56be16d0 100644 --- a/src/main/webapp/WEB-INF/views/cfg/whitelist/ipList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/whitelist/ipList.jsp @@ -2,7 +2,7 @@ <%@ include file="/WEB-INF/include/taglib.jsp"%> -<spring:message code="${cfgName}"></spring:message> +<spring:message code="${cfg.menuNameCode}"></spring:message>