From e6426052cdd29c62d584667372b1028b468c768f Mon Sep 17 00:00:00 2001 From: zhangwei Date: Wed, 2 Jan 2019 17:17:15 +0600 Subject: [PATCH 1/5] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E6=B5=81=E9=87=8F?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=8A=98=E7=BA=BF=E5=9B=BE=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=8C=BA=E8=AE=BE=E7=BD=AE=EF=BC=9B=202.=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E7=89=88=E6=9C=AC=E4=BF=A1=E6=81=AF=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=9C=A8=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=AD=EF=BC=8C=E8=80=8C=E4=B8=8D=E6=98=AF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3URL=E5=8F=82=E6=95=B0=E4=B8=AD=EF=BC=9B=203.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE=E5=90=AF=E5=81=9C=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=B0=83=E5=BA=A6=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/maat/ToUpdateMaatBeanStatus.java | 122 ++++++ .../java/com/nis/util/ConfigServiceUtil.java | 36 ++ src/main/java/com/nis/util/Constants.java | 3 + .../java/com/nis/util/SchedulerTaskUtil.java | 390 ++++++++++++------ .../TrafficStatisticsReportController.java | 4 +- .../ConfigSynchronizationDao.java | 2 + .../ConfigSynchronizationDao.xml | 20 + src/main/resources/nis.properties | 184 +++++---- .../views/dashboard/trafficBandwidthList.jsp | 3 +- 9 files changed, 553 insertions(+), 211 deletions(-) create mode 100644 src/main/java/com/nis/domain/maat/ToUpdateMaatBeanStatus.java diff --git a/src/main/java/com/nis/domain/maat/ToUpdateMaatBeanStatus.java b/src/main/java/com/nis/domain/maat/ToUpdateMaatBeanStatus.java new file mode 100644 index 000000000..869d7e249 --- /dev/null +++ b/src/main/java/com/nis/domain/maat/ToUpdateMaatBeanStatus.java @@ -0,0 +1,122 @@ +/** + *@Title: ToMaatBean.java + *@Package com.nis.domain.configuration + *@Description TODO + *@author dell + *@date 2018年2月28日 下午2:03:08 + *@version 版本号 + */ +package com.nis.domain.maat; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * 修改maat类配置状态 + * @ClassName: ToUpdateStatusMaatBean.java + * @Description: TODO + * @author (dell) + * @date 2019年1月2日 下午3:08:08 + * @version V1.0 + */ +public class ToUpdateMaatBeanStatus implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -3468862666445104490L; + /** + * @Fields serialVersionUID:TODO(转换为maat格式的java bean) + * + * @since 1.0.0 + */ + @Expose + private String version; + @Expose + @SerializedName("operator") + private String creatorName; + @Expose + @SerializedName("opTime") + private Date auditTime; + @Expose + private Integer opAction; + @Expose + private List configCompileStartStopList; + + public static class UpdateMaatCfgStatus{ + @Expose + private Integer compileId; + @Expose + private Integer isValid; + @Expose + @SerializedName("opTime") + private Date auditTime; + public Integer getCompileId() { + return compileId; + } + public void setCompileId(Integer compileId) { + this.compileId = compileId; + } + public Integer getIsValid() { + return isValid; + } + public void setIsValid(Integer isValid) { + this.isValid = isValid; + } + public Date getAuditTime() { + return auditTime; + } + public void setAuditTime(Date auditTime) { + this.auditTime = auditTime; + } + + } + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getCreatorName() { + return creatorName; + } + + public void setCreatorName(String creatorName) { + this.creatorName = creatorName; + } + + public Date getAuditTime() { + return auditTime; + } + + public void setAuditTime(Date auditTime) { + this.auditTime = auditTime; + } + + public List getConfigCompileStartStopList() { + return configCompileStartStopList; + } + + public void setConfigCompileStartStopList(List configCompileStartStopList) { + this.configCompileStartStopList = configCompileStartStopList; + } + + public Integer getOpAction() { + return opAction; + } + + public void setOpAction(Integer opAction) { + this.opAction = opAction; + } + + public static void main(String[] args) { + + } +} diff --git a/src/main/java/com/nis/util/ConfigServiceUtil.java b/src/main/java/com/nis/util/ConfigServiceUtil.java index c29b8b35f..8779f74ff 100644 --- a/src/main/java/com/nis/util/ConfigServiceUtil.java +++ b/src/main/java/com/nis/util/ConfigServiceUtil.java @@ -814,6 +814,42 @@ public class ConfigServiceUtil { return bean; } + /** + * maat配置停启用 + * @param params + * @return + */ + public static String configStatusUpdate(String params) throws MaatConvertException{ + String result = null; + ToMaatResult bean = null; + Response response=null; + try { + String url = Constants.SERVICE_URL+Constants.CONFIG_START_STOP_UPDATE; + //创建连接 + WebTarget wt = ClientUtil.getWebTarger(url); + logger.info("put url:"+url); + //获取响应结果 + Builder header = wt.request(MediaType.APPLICATION_JSON).header("Content-Type", MediaType.APPLICATION_JSON); + try { + response= header.put(Entity.entity(params, MediaType.APPLICATION_JSON)); + if(response != null) { + result=response.readEntity(String.class); + } + } catch (Exception e) { + throw new MaatConvertException(""); + } + if(response !=null && response.getStatus() == 200){ + JSONObject resObject = JSONObject.fromObject(result); + bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class); + }else{ + throw new MaatConvertException(":"+result); + } + } catch (Exception e) { + throw e; + } + + return result; + } public static void main(String[] args) { try { // getId(1,1); diff --git a/src/main/java/com/nis/util/Constants.java b/src/main/java/com/nis/util/Constants.java index a473f80ba..c8a5836d5 100644 --- a/src/main/java/com/nis/util/Constants.java +++ b/src/main/java/com/nis/util/Constants.java @@ -799,4 +799,7 @@ public final class Constants { public static final String NTC_EVENT_MONITOR_OR_BLOCK_Report =Configurations.getStringProperty("ntcEventsMonitorOrBlock",""); public static final String NTC_EVENT_KEYPROTECTION_Report =Configurations.getStringProperty("ntcEventKeyProtection",""); + + //配置启停服务接口方法 + public static final String CONFIG_START_STOP_UPDATE=Configurations.getStringProperty("configStartStop", "configStartStop"); } diff --git a/src/main/java/com/nis/util/SchedulerTaskUtil.java b/src/main/java/com/nis/util/SchedulerTaskUtil.java index e79e9432c..52baa0ca0 100644 --- a/src/main/java/com/nis/util/SchedulerTaskUtil.java +++ b/src/main/java/com/nis/util/SchedulerTaskUtil.java @@ -1,20 +1,36 @@ package com.nis.util; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.collect.Lists; +import com.nis.domain.configuration.AppPolicyCfg; import com.nis.domain.configuration.AvFileSampleCfg; import com.nis.domain.configuration.AvSignSampleCfg; import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.DnsIpCfg; import com.nis.domain.configuration.DnsResStrategy; +import com.nis.domain.configuration.FileDigestCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.PxyObjKeyring; import com.nis.domain.configuration.PxyObjTrustedCaCert; import com.nis.domain.configuration.PxyObjTrustedCaCrl; +import com.nis.domain.maat.MaatCfg; +import com.nis.domain.maat.ToMaatBean; +import com.nis.domain.maat.ToMaatResult; +import com.nis.domain.maat.ToUpdateMaatBeanStatus; +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.maat.ToUpdateMaatBeanStatus.UpdateMaatCfgStatus; import com.nis.web.dao.configuration.ConfigSynchronizationDao; import com.nis.web.service.BaseService; import com.nis.web.service.SpringContextHolder; @@ -29,6 +45,7 @@ public class SchedulerTaskUtil { //调度任务的配置信息,复用配置同步DAO private static ConfigSynchronizationDao configSynchronizationDao = SpringContextHolder.getBean(ConfigSynchronizationDao.class); + private Logger logger = LoggerFactory.getLogger(getClass()); /** * 根据业务与编译ID查询配置,修改失效或生效状态,并下发至综合服务 @@ -49,141 +66,280 @@ public class SchedulerTaskUtil { String className = service.get("className").toString(); BaseCfg entity = new BaseCfg(); entity.setServiceId(serviceId); - entity.setCompileId(compileId); entity.setTableName(tableName); List list = Lists.newArrayList(); + List callBackCfgList = Lists.newArrayList(); + boolean isUpdateContent = false; + /** + * 根据编译ID查询配置,如果配置当前审核状态为未审核(is_audit=0),并且newIsValid=1需要查询详细的域配置信息,下发配置详细内容, + * 如果已审核(is_audit=1),则只查询配置主表,更新配置状态即可, + * 如果审核取消(is_audit=3)则删除定时任务,表示配置已最终删除,此状态处理原则上在配置修改拦截器中处理 + */ if("1".equals(serviceType)){//maat类配置 - //查询配置 - if("cfg_index_info".equals(tableName)){ - list = configSynchronizationDao.getCfgIndexList(entity); - - }else if("file_digest_cfg".equals(tableName)){ - list = configSynchronizationDao.getFileDigestListByService(entity); - - }else if("app_policy_cfg".equals(tableName)){ - list = configSynchronizationDao.getAppPolicyList(entity); - - }else if("app_feature_index".equals(tableName)){ - list = configSynchronizationDao.getAppFeatureIndexList(entity); - - } - if(newIsValid.equals(1)){//生效 - //调用综合服务配置生效启用接口 - - }else if(newIsValid.equals(0)){//失效 - //调用综合服务配置失效停用接口 - - } - }else if("2".equals(serviceType)){//回调类配置 - List newList = Lists.newArrayList(); - List ids = Lists.newArrayList(); - //查询配置 - if(entity.getServiceId().equals(3)){//ip drop回调类配置用了主表和子表关系 - list = configSynchronizationDao.getCfgIndexList(entity); - if(!StringUtil.isEmpty(list)){ - List compileIds = Lists.newArrayList(); + Date updateTime = new Date(); + //下发并修改配置状态的参数类 + ToUpdateMaatBeanStatus maatStatusBean = new ToUpdateMaatBeanStatus(); + UpdateMaatCfgStatus updateCfg = new UpdateMaatCfgStatus(); + List configCompileStartStopList = new ArrayList(); + maatStatusBean.setVersion(Constants.MAAT_VERSION); + maatStatusBean.setOpAction(Constants.INSERT_ACTION); + maatStatusBean.setAuditTime(updateTime); + maatStatusBean.setCreatorName("TaskScheduler");//任务调度定时修改状态 + + //下发带有配置内容的参数对象 + ToMaatBean maatBean = new ToMaatBean(); + MaatCfg maatCfg = new MaatCfg(); + List configCompileList = new ArrayList(); + List groupRelationList = new ArrayList(); + List ipRegionList = new ArrayList(); + List strRegionList = new ArrayList(); + List numRegionList = new ArrayList(); + List digestRegionList = new ArrayList(); + List areaIpRegionList = new ArrayList(); + +// for(Integer compileId:compileIds){ + entity.setCompileId(compileId); + //查询配置 + if("cfg_index_info".equals(tableName)){ + list = configSynchronizationDao.getCfgIndexList(entity); + List> cfgList = (List>) service.get("cfgList"); for(int i=0;i m:cfgList){ + String regionTableName = m.get("tableName").toString(); + config.setTableName(regionTableName); + configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 + } + } + } } - List subList = configSynchronizationDao.getIpDropList("ip_port_cfg", compileIds); - for(int i=0;i> cfgList = (List>) service.get("cfgList"); for(int i=0;i m:cfgList){ + String regionTableName = m.get("tableName").toString(); + config.setTableName(regionTableName); + configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 + } + } + } } - - }else if(className.equals("AvSignSampleCfg")){//音视频场景配置 - list = configSynchronizationDao.getAvSignCfgList(entity); + + }else if("app_policy_cfg".equals(tableName)){ + list = configSynchronizationDao.getAppPolicyList(entity); + List> cfgList = (List>) service.get("cfgList"); for(int i=0;i(); - list=configSynchronizationDao.getPxyObjTrustedCrlCfgListByCertId(ids); - for(int i=0;i m:cfgList){ + String regionTableName = m.get("tableName").toString(); + config.setTableName(regionTableName); + configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 + } + } + } } - }else if(className.equals("PxyObjTrustedCaCrl")){ - ids=new ArrayList<>(); - //只允许单独下发certId为空或0的crl配置 - list = configSynchronizationDao.getPxyObjTrustedCrlCfgList(entity); - for(int i=0;i compileIdArray = Lists.newArrayList(); + for(int i=0;i getComplexStrListByService(BaseCfg entity); public List getAppIpPortList(@Param("tableName")String tableName,@Param("compileIds")List compileIds); public List getAppIpFeatureList(BaseCfg entity); + + public void updateCfgStatus(BaseCfg entity); } diff --git a/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml index 05ff5b85d..9b76df62b 100644 --- a/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml +++ b/src/main/java/com/nis/web/dao/configuration/ConfigSynchronizationDao.xml @@ -1582,6 +1582,26 @@ AND a.CFG_ID!=#{cfgId,jdbcType=BIGINT} + + + + + update ${tableName} set is_valid = #{isValid,jdbcType=INTEGER}, + edit_time = #{editTime,jdbcType=TIMESTAMP} + + ,is_audit = #{isAudit,jdbcType=INTEGER} + ,audit_time=#{auditTime,jdbcType=TIMESTAMP} + + + + AND cfg_id = #{cfgId,jdbcType=BIGINT} + + + AND compile_id = #{compileId,jdbcType=INTEGER} + + and function_id=#{functionId,jdbcType=INTEGER} + + + + insert into app_complex_feature_cfg ( + APP_CODE,BEHAV_CODE,SPEC_SERVICE_ID,CFG_DESC,ACTION,IS_VALID,IS_AUDIT, + CREATOR_ID,CREATE_TIME,EDITOR_ID,EDIT_TIME,AUDITOR_ID,AUDIT_TIME, + SERVICE_ID,REQUEST_ID,COMPILE_ID,IS_AREA_EFFECTIVE,CLASSIFY, + ATTRIBUTE,LABLE,AREA_EFFECTIVE_IDS,FUNCTION_ID,CFG_TYPE,CFG_REGION_CODE, + DISTRICT,CFG_KEYWORDS,EXPR_TYPE,MATCH_METHOD,IS_HEXBIN,DO_LOG,user_region1,user_region2,user_region3,user_region4,user_region5, + ver,ihl,tos,total_length,flags,fragment_offset,protocol,icmp_type,icmp_code,icmp_identifier,header_type + )values ( + , + #{cfgType,jdbcType=VARCHAR},#{cfgRegionCode,jdbcType=INTEGER}, + #{district,jdbcType=VARCHAR},#{cfgKeywords,jdbcType=VARCHAR}, + #{exprType,jdbcType=INTEGER},#{matchMethod,jdbcType=INTEGER},#{isHexbin,jdbcType=INTEGER}, + #{doLog,jdbcType=INTEGER},#{userRegion1,jdbcType=VARCHAR},#{userRegion2,jdbcType=VARCHAR}, + #{userRegion3,jdbcType=VARCHAR},#{userRegion4,jdbcType=VARCHAR},#{userRegion5,jdbcType=VARCHAR}, + #{ver,jdbcType=VARCHAR},#{ihl,jdbcType=VARCHAR},#{tos,jdbcType=VARCHAR},#{totalLength,jdbcType=VARCHAR}, + #{flags,jdbcType=VARCHAR},#{fragmentOffset,jdbcType=VARCHAR},#{protocol,jdbcType=VARCHAR},#{icmpType,jdbcType=VARCHAR}, + #{icmpCode,jdbcType=VARCHAR},#{icmpIdentifier,jdbcType=VARCHAR},#{headerType,jdbcType=VARCHAR} + ) + + diff --git a/src/main/java/com/nis/web/service/BaseService.java b/src/main/java/com/nis/web/service/BaseService.java index 77fe7a122..f4902b221 100644 --- a/src/main/java/com/nis/web/service/BaseService.java +++ b/src/main/java/com/nis/web/service/BaseService.java @@ -1613,6 +1613,8 @@ public abstract class BaseService { type="DnsResStrategy"; }else if(list.get(0) instanceof AsnIpCfg) { type="AsnIpCfg"; + }else if(list.get(0) instanceof AppComplexFeatureCfg) { + type="AppComplexFeature"; } if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { this.saveCfgIndexOf(cfgIndexInfos); @@ -1634,6 +1636,9 @@ public abstract class BaseService { }else if("AsnIpCfg".equals(type)) { List listPage = (List) list; this.saveAsnIpBatch(listPage); + }else if("AppComplexFeature".equals(type)) { + List listPage = (List) list; + this.saveAppComplexFeatureBatch(listPage); }else if("BaseStringCfg".equals(type)) { List> listPage = (List>) list; // 调用对应配置的service @@ -1815,6 +1820,30 @@ public abstract class BaseService { } } + + /** + * APP Payload导入配置时数据批量入库 + * @param data + */ + @Transactional(readOnly=false,rollbackFor=RuntimeException.class) + public void saveAppComplexFeatureBatch(List data) { + SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); + SqlSession batchSqlSession = null; + try{ + batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + for(int index = 0; index < data.size();index++){ + AppComplexFeatureCfg cfg = data.get(index); + ((AppMultiFeatureCfgDao) batchSqlSession.getMapper(AppMultiFeatureCfgDao.class)).insertAppComplexFeatureCfgBatch(cfg); + } + batchSqlSession.commit(); + }finally { + if(batchSqlSession != null){ + batchSqlSession.close(); + } + } + + } + /** * 同一个app下的ip批量保存 * @param cfgs diff --git a/src/main/java/com/nis/web/service/configuration/AppMultiFeatureCfgService.java b/src/main/java/com/nis/web/service/configuration/AppMultiFeatureCfgService.java index 5b105e535..a251d9143 100644 --- a/src/main/java/com/nis/web/service/configuration/AppMultiFeatureCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/AppMultiFeatureCfgService.java @@ -5,6 +5,8 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; +import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -20,6 +22,7 @@ import com.nis.domain.configuration.AppIpCfg; import com.nis.domain.configuration.AppStringFeatureCfg; import com.nis.domain.configuration.AppTcpCfg; import com.nis.domain.configuration.CfgIndexInfo; +import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.HttpUrlCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.NtcSubscribeIdCfg; @@ -111,43 +114,9 @@ public class AppMultiFeatureCfgService extends BaseService { cfg.setIsCaseInsenstive(0); cfg.setExprType(3); cfg.setMatchMethod(0); - String keyword = ""; - if(cfg.getHeaderType().equals("IP_header")){ - if(StringUtils.isNoneBlank(cfg.getVer())){ - keyword += "0-3:"+cfg.getVer()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIhl())){ - keyword += "4-7:"+cfg.getIhl()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getTos())){ - keyword += "8-15:"+cfg.getTos()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getTotalLength())){ - keyword += "16-31:"+cfg.getTotalLength()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getFlags())){ - keyword += "48-50:"+cfg.getFlags()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getFragmentOffset())){ - keyword += "56-63:"+cfg.getFragmentOffset()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getProtocol())){ - keyword += "72-79:"+cfg.getProtocol()+Constants.KEYWORD_EXPR; - } - }else{ - if(StringUtils.isNoneBlank(cfg.getIcmpType())){ - keyword += "0-7:"+cfg.getIcmpType()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIcmpCode())){ - keyword += "8-15:"+cfg.getIcmpCode()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIcmpIdentifier())){ - keyword += "32-47:"+cfg.getIcmpIdentifier()+Constants.KEYWORD_EXPR; - } - } - keyword=keyword.substring(0,keyword.lastIndexOf(Constants.KEYWORD_EXPR)); - cfg.setCfgKeywords(keyword); + this.setL3HeaderKeyword(cfg); appMultiFeatureCfgDao.insertAppComplexFeatureCfg(cfg); + }else if(StringUtils.isNotBlank(cfg.getCfgKeywords())){ BeanUtils.copyProperties(entity, cfg,new String[]{"cfgRegionCode","cfgType"}); cfg.setHeaderType(null); @@ -205,43 +174,9 @@ public class AppMultiFeatureCfgService extends BaseService { cfg.setIsCaseInsenstive(0); cfg.setExprType(3); cfg.setMatchMethod(0); - String keyword = ""; - if(cfg.getHeaderType().equals("IP_header")){ - if(StringUtils.isNoneBlank(cfg.getVer())){ - keyword += "0-3:"+cfg.getVer()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIhl())){ - keyword += "4-7:"+cfg.getIhl()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getTos())){ - keyword += "8-15:"+cfg.getTos()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getTotalLength())){ - keyword += "16-31:"+cfg.getTotalLength()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getFlags())){ - keyword += "48-50:"+cfg.getFlags()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getFragmentOffset())){ - keyword += "56-63:"+cfg.getFragmentOffset()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getProtocol())){ - keyword += "72-79:"+cfg.getProtocol()+Constants.KEYWORD_EXPR; - } - }else{ - if(StringUtils.isNoneBlank(cfg.getIcmpType())){ - keyword += "0-7:"+cfg.getIcmpType()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIcmpCode())){ - keyword += "8-15:"+cfg.getIcmpCode()+Constants.KEYWORD_EXPR; - } - if(StringUtils.isNotBlank(cfg.getIcmpIdentifier())){ - keyword += "32-47:"+cfg.getIcmpIdentifier()+Constants.KEYWORD_EXPR; - } - } - keyword=keyword.substring(0,keyword.lastIndexOf(Constants.KEYWORD_EXPR)); - cfg.setCfgKeywords(keyword); + this.setL3HeaderKeyword(cfg); appMultiFeatureCfgDao.insertAppComplexFeatureCfg(cfg); + }else if(StringUtils.isNotBlank(cfg.getCfgKeywords())){ BeanUtils.copyProperties(entity, cfg,new String[]{"cfgRegionCode","cfgType"}); cfg.setHeaderType(null); @@ -259,6 +194,46 @@ public class AppMultiFeatureCfgService extends BaseService { } } } + + public void setL3HeaderKeyword(AppComplexFeatureCfg cfg) { + String keyword = ""; + if(cfg.getHeaderType().equals("IP_header")){ + if(StringUtils.isNoneBlank(cfg.getVer())){ + keyword += "0-3:"+cfg.getVer()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getIhl())){ + keyword += "4-7:"+cfg.getIhl()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getTos())){ + keyword += "8-15:"+cfg.getTos()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getTotalLength())){ + keyword += "16-31:"+cfg.getTotalLength()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getFlags())){ + keyword += "48-50:"+cfg.getFlags()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getFragmentOffset())){ + keyword += "56-63:"+cfg.getFragmentOffset()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getProtocol())){ + keyword += "72-79:"+cfg.getProtocol()+Constants.KEYWORD_EXPR; + } + }else{ + if(StringUtils.isNoneBlank(cfg.getIcmpType())){ + keyword += "0-7:"+cfg.getIcmpType()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getIcmpCode())){ + keyword += "8-15:"+cfg.getIcmpCode()+Constants.KEYWORD_EXPR; + } + if(StringUtils.isNotBlank(cfg.getIcmpIdentifier())){ + keyword += "32-47:"+cfg.getIcmpIdentifier()+Constants.KEYWORD_EXPR; + } + } + keyword=keyword.substring(0,keyword.lastIndexOf(Constants.KEYWORD_EXPR)); + cfg.setCfgKeywords(keyword); + } + public void auditAppFeatureCfg(AppFeatureIndex entity, Integer isAudit) { ToMaatBean maatBean = new ToMaatBean(); MaatCfg maatCfg = new MaatCfg(); @@ -460,4 +435,219 @@ public class AppMultiFeatureCfgService extends BaseService { return dataMap; } + /** + * APP Payload L3_HEADER导入操作特殊属性限制 + * @param baseStringCfg + * @param errInfo + * @param prop + */ + public void checkImportAppPayload(AppComplexFeatureCfg baseStringCfg, StringBuffer errInfo, Properties prop) { + String headerType = baseStringCfg.getHeaderType(); + String ver = baseStringCfg.getVer(); + String ihl = baseStringCfg.getIhl(); + String tos = baseStringCfg.getTos(); + String totalLength = baseStringCfg.getTotalLength(); + String flags = baseStringCfg.getFlags(); + String fragmentOffset = baseStringCfg.getFragmentOffset(); + String protocol = baseStringCfg.getProtocol(); + String icmpType = baseStringCfg.getIcmpType(); + String icmpCode = baseStringCfg.getIcmpCode(); + String icmpIdentifier = baseStringCfg.getIcmpIdentifier(); + + boolean errorFlag = false; + Pattern pattern = Pattern.compile("^([0-9|a-f|A-F]*)$");//.matcher(keyword).matches(); + StringBuffer errInfoCopy = new StringBuffer(); + errInfoCopy.append(errInfo); + + if("IP_header".equals(headerType)) { + boolean ipHeaderFlag = false; + List ipHeaderList = new ArrayList<>(); + if(StringUtils.isNotBlank(baseStringCfg.getVer())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getIhl())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getTos())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getTotalLength())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getFlags())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getFragmentOffset())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(StringUtils.isNotBlank(baseStringCfg.getProtocol())) { ipHeaderList.add(baseStringCfg.getVer()); } + if(ipHeaderList.size() > 4) {// IP_header最多填写四个属性值 + errInfo.append("IP_header " + prop.getProperty("l3_header_error")+";"); + }else { + ipHeaderFlag = true; + } + + int count = 0; + if(StringUtils.isBlank(ver) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "VER ") + ";"); + }else if(ver.trim().length() != 4 && ipHeaderFlag){ + errInfo.append( + "VER "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(ver).matches() && ipHeaderFlag) { + errInfo.append( + "VER "+ " '" + ver + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(ihl) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "IHL ") + ";"); + }else if(ihl.trim().length() != 4 && ipHeaderFlag){ + errInfo.append( + "IHL "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(ihl).matches() && ipHeaderFlag) { + errInfo.append( + "IHL "+ " '" + ihl + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(tos) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "TOS ") + ";"); + }else if(tos.trim().length() != 8 && ipHeaderFlag){ + errInfo.append( + "TOS "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(tos).matches() && ipHeaderFlag) { + errInfo.append( + "TOS "+ " '" + tos + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(totalLength) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "Total Length ") + ";"); + }else if(totalLength.trim().length() != 16 && ipHeaderFlag){ + errInfo.append( + "Total Length "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(totalLength).matches() && ipHeaderFlag) { + errInfo.append( + "Total Length "+ " '" + totalLength + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(flags) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "Flags ") + ";"); + }else if(flags.trim().length() != 3 && ipHeaderFlag){ + errInfo.append( + "Flags "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(flags).matches() && ipHeaderFlag) { + errInfo.append( + "Flags "+ " '" + flags + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(fragmentOffset) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "fragment offset ") + ";"); + }else if(fragmentOffset.trim().length() != 8 && ipHeaderFlag){ + errInfo.append( + "fragment offset "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(fragmentOffset).matches() && ipHeaderFlag) { + errInfo.append( + "fragment offset "+ " '" + fragmentOffset + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(protocol) && ipHeaderFlag) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "Protocol ") + ";"); + }else if(protocol.trim().length() != 8 && ipHeaderFlag){ + errInfo.append( + "Protocol "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(protocol).matches() && ipHeaderFlag) { + errInfo.append( + "Protocol "+ " '" + protocol + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if((count >0 || count <5) && (!errorFlag)) { + errInfo.setLength(0);; + errInfo.append(errInfoCopy); + } + baseStringCfg.setIcmpType(null); + baseStringCfg.setIcmpCode(null); + baseStringCfg.setIcmpIdentifier(null); + }else { + int count = 0; + if(StringUtils.isBlank(icmpType)) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "ICMP type ") + ";"); + }else if(icmpType.trim().length() != 8){ + errInfo.append( + "ICMP type "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(icmpType).matches()) { + errInfo.append( + "ICMP type "+ " '" + icmpType + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(icmpCode)) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "ICMP code ") + ";"); + }else if(icmpCode.trim().length() != 8){ + errInfo.append( + "ICMP code "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(icmpCode).matches()) { + errInfo.append( + "ICMP code "+ " '" + icmpCode + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if(StringUtils.isBlank(icmpIdentifier)) { + errInfo.append( + String.format(prop.getProperty("can_not_null"), "ICMP identifier ") + ";"); + }else if(icmpIdentifier.trim().length() != 16){ + errInfo.append( + "ICMP identifier "+prop.getProperty("length_error") + ";"); + errorFlag = true; + }else if(!pattern.matcher(icmpIdentifier).matches()) { + errInfo.append( + "ICMP identifier "+ " '" + icmpIdentifier + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";"); + errorFlag = true; + }else { + count++; + } + + if((count >0) && (!errorFlag)) { + errInfo.setLength(0);; + errInfo.append(errInfoCopy); + } + baseStringCfg.setVer(null); + baseStringCfg.setIhl(null); + baseStringCfg.setTos(null); + baseStringCfg.setTotalLength(null); + baseStringCfg.setFlags(null); + baseStringCfg.setFragmentOffset(null); + baseStringCfg.setProtocol(null); + } + + } + } diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties index e35ca8087..27aac9641 100644 --- a/src/main/resources/messages/message_en.properties +++ b/src/main/resources/messages/message_en.properties @@ -1438,4 +1438,10 @@ print=Print traffic_connect_log=Traffic Log keyword_log_to_url=KeywordLogToURL http_log=HTTP Logs -cut_sample_tool=Cut Sample Tool \ No newline at end of file +cut_sample_tool=Cut Sample Tool +hex_minlength_3=Please enter a hexadecimal string of length 3 +hex_minlength_4=Please enter a hexadecimal string of length 4 +hex_minlength_8=Please enter a hexadecimal string of length 8 +hex_minlength_16=Please enter a hexadecimal string of length 16 +need_input=Attributes need to be filled in +max_input=Fill in at most four \ No newline at end of file diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties index 8b97df174..0cb27f12d 100644 --- a/src/main/resources/messages/message_ru.properties +++ b/src/main/resources/messages/message_ru.properties @@ -1442,4 +1442,10 @@ print=Print traffic_connect_log=\u0416\u0443\u0440\u043D\u0430\u043B \u0422\u0440\u0430\u0444\u0438\u043A\u0430 keyword_log_to_url=KeywordLogToURL http_log=HTTP Logs -cut_sample_tool=Cut Sample Tool \ No newline at end of file +cut_sample_tool=Cut Sample Tool +hex_minlength_3=Please enter a hexadecimal string of length 3 +hex_minlength_4=Please enter a hexadecimal string of length 4 +hex_minlength_8=Please enter a hexadecimal string of length 8 +hex_minlength_16=Please enter a hexadecimal string of length 16 +need_input=Attributes need to be filled in +max_input=Fill in at most four \ No newline at end of file diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties index 07a1d0de1..710d6f28b 100644 --- a/src/main/resources/messages/message_zh_CN.properties +++ b/src/main/resources/messages/message_zh_CN.properties @@ -1438,4 +1438,10 @@ print=\u6253\u5370 traffic_connect_log=\u6D41\u91CF\u65E5\u5FD7 keyword_log_to_url=\u5173\u952E\u5B57\u65E5\u5FD7\u8F6CURL http_log=HTTP \u65E5\u5FD7 -cut_sample_tool=\u6837\u4F8B\u526A\u5207\u5DE5\u5177 \ No newline at end of file +cut_sample_tool=\u6837\u4F8B\u526A\u5207\u5DE5\u5177 +hex_minlength_3=\u8BF7\u8F93\u5165\u957F\u5EA6\u4E3A3\u7684\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32 +hex_minlength_4=\u8BF7\u8F93\u5165\u957F\u5EA6\u4E3A4\u7684\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32 +hex_minlength_8=\u8BF7\u8F93\u5165\u957F\u5EA6\u4E3A8\u7684\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32 +hex_minlength_16=\u8BF7\u8F93\u5165\u957F\u5EA6\u4E3A16\u7684\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32 +need_input=\u9700\u8981\u586B\u5199\u5C5E\u6027 +max_input=\u6700\u591A\u586B\u5199\u56DB\u4E2A \ No newline at end of file diff --git a/src/main/resources/sql/20190102/update_function_dicts.sql b/src/main/resources/sql/20190102/update_function_dicts.sql new file mode 100644 index 000000000..2b3c60455 --- /dev/null +++ b/src/main/resources/sql/20190102/update_function_dicts.sql @@ -0,0 +1,6 @@ +-- APP Payload -- +UPDATE function_region_dict SET is_import = 1 WHERE function_id = 563 AND dict_id = 211; +UPDATE function_region_dict SET is_import = 1 WHERE function_id = 563 AND dict_id = 212; +UPDATE function_service_dict SET is_import = 1 WHERE function_id = 563; + + diff --git a/src/main/webapp/WEB-INF/include/excel/importModal.jsp b/src/main/webapp/WEB-INF/include/excel/importModal.jsp index a72b2da63..2b5297212 100644 --- a/src/main/webapp/WEB-INF/include/excel/importModal.jsp +++ b/src/main/webapp/WEB-INF/include/excel/importModal.jsp @@ -94,11 +94,11 @@
- - + +