164 Commits

Author SHA1 Message Date
wangxin
4157f58ab9 HTTP(S)配置导入分离 2019-04-03 18:23:40 +08:00
wangxin
d27ba7ec93 DDOS,Intercept Policy导入拆分 2019-04-02 17:52:10 +08:00
wangxin
bd29b40573 FTP P2P Streaming Media, VoIp导入分离 2019-04-01 17:39:32 +08:00
wangxin
298eeef5e4 Mail模块分离 2019-03-29 19:11:05 +08:00
wangxin
873b3333af HTTP导入从公共导入分离 2019-03-29 15:29:12 +08:00
wangxin
068d2e859c IP WhiteList
IP Address
IP Payload
IP Spoofing
Protocol Identify
App Identify
Behavior Identify
BGP
DNS
SSL
界面相关导入分离
2019-03-28 15:12:27 +08:00
zhangwenqing
a1ad694260 修复配置导入Excel文件存在空行时,错误信息行号与文件行号对不上bug 2019-03-25 10:00:31 +08:00
zhangwenqing
253adc1396 修复配置导入错误IsHex值不校验BUG
复现条件:填写错误IsHex值,不填写Is Case-sensitive
2019-03-22 18:21:25 +08:00
duandongmei
fc302fe984 全量同步时,某业务无数据也需要发送一次{}请求。
全业务全量同步时,需要将service=-1标识发送至服务端,便于服务端清理所有分组复用业务配置
2019-03-21 17:33:55 +06:00
zhanghongqing
fcface8471 修改ddos配置任务调度bug 2019-03-21 10:24:57 +08:00
段冬梅
19b1d1b40c Merge branch 'develop_no_common_group' of https://git.mesalab.cn/K18_NTCS_WEB/NTC.git into develop_no_common_group 2019-03-20 11:32:40 +08:00
段冬梅
dc1a75c9c9 全量同步接口调用打开 2019-03-20 11:32:24 +08:00
zhangwenqing
1896c51a87 删除重复代码. 2019-03-19 18:00:31 +08:00
段冬梅
f284491963 多媒体的置信度默认值bug更改;
音视频的任务调度bug更改;
批量配置生效去掉无效代码
2019-03-19 15:11:34 +08:00
段冬梅
f309b8b79b ip配置的查询去掉dns策略相关表关联 2019-03-18 16:31:47 +08:00
段冬梅
805d444d01 各业务配置批量下发功能提交 2019-03-18 15:58:15 +08:00
zhanghongqing
36f09542da 增加定时器中文国际化 2019-03-18 11:53:17 +08:00
段冬梅
6017b7f454 色情场景只有在配置取消和配置未下发时可以编辑 2019-03-15 17:50:05 +08:00
段冬梅
f90d3dbf32 同步界面增加业务的回传,业同步业务从xml中获取 2019-03-15 17:31:57 +08:00
zhangwenqing
b588f12b0c 优化配置导入操作(缓存导入文件获取过的字典值) 2019-03-15 17:20:38 +08:00
段冬梅
9a9b050fc7 批量配置失效、全量下发、各业务全量下发功能提交 2019-03-15 16:15:11 +08:00
bsdbc
e977d00657 修改帮助页面样式 2019-03-12 17:38:28 +08:00
段冬梅
ef5c6cdfa6 去掉回调类配置批量下发的打印,打开asn的配置文件 2019-03-12 11:01:53 +08:00
bsdbc
62056ed718 帮助文档页面左侧树状目录添加横向滚动条 2019-03-12 10:18:51 +08:00
wangwenrui
e1966eb0c3 1.数据库新建表help_document
2.redis相关说明:
	帮助文档会缓存在redis中,使用的redis为nis.properties配置文件中redis.host配置的界面所用redis
	帮助文档key在redis中未设超时时间
	帮助文档key命名:help:cache:+md文件的名称      --> 帮助文档内容
				help:cache:back:+md文件的名称  --> 帮助文档备份的内容
				help:cache:cacheFlag   --> 帮助文档是否缓存标识,如果不为空且值为true,表示已缓存,不会重复缓存
2019-03-12 09:40:12 +08:00
wangwenrui
db00cafd84 新开分支整理代码:
1.帮助文档修改功能
2.帮助文档与上一版对比功能
3.单点问题解决
4.markdown帮助文档

Conflicts:
	src/main/resources/messages/message_en.properties
	src/main/resources/messages/message_ru.properties
	src/main/resources/messages/message_zh_CN.properties
2019-03-12 09:36:17 +08:00
段冬梅
785150f921 ASN ip,APP特征业务的配置批量取消功能完成 2019-03-11 17:06:31 +08:00
zhanghongqing
c8e43c81f1 修改配置中APP SSL证书特征新增界面中的匹配区域为空时,无文字提示问题。 2019-03-11 15:48:39 +08:00
段冬梅
b87f99c852 除APP feature和ASN IP外的业务增加批量配置取消功能;
修复ddos新增bug;
2019-03-05 17:42:12 +08:00
段冬梅
c348697e3b IP业务增加配置批量取消功能;
去掉批量取消的全部json打印;
清库语句完善,并增加定时任务的表删除及创建sql
2019-03-01 18:18:49 +08:00
段冬梅
6b37a95ee2 //http url
//dns
//mail address
//mail advanced
//https monitor
//https block
//https redirect
//https replace
//https whitelist
#以上业务的配置批量失效功能提交
2019-02-28 17:55:56 +08:00
leijun
d8b05f9431 修复DNAT复用策略 新增时缺少必填信息框 2019-02-28 11:45:21 +08:00
段冬梅
8682124d04 定时忽略updatePxyObjTrustedCaCrl方法
客户端用户管理修改修改成功提示为success类型
修改dns响应策略界面的错误提示框位置
2019-02-28 10:59:21 +08:00
leijun
b12f45a187 cgi 接口服务 防空指针处理 2019-02-28 10:08:23 +08:00
leijun
ba56de3336 cgi 接口服务 防空指针处理 2019-02-28 09:54:05 +08:00
dongxiaoyan
518600da40 去掉app流量趋势中app名称国际化 2019-02-27 17:55:58 +08:00
dongxiaoyan
e98c8f2f2a 解决流量统计app趋势中app名称特殊符号跟国际化标签写法的冲突bug 2019-02-27 17:43:54 +08:00
leijun
322e5ba8a8 cfgRegionCodeR 判断统一大小写 2019-02-27 11:27:06 +08:00
leijun
c87a465200 修复http url 白名单导入模板 下载黑屏 2019-02-27 11:23:23 +08:00
leijun
bf74483f77 实时报表-流量统计
http(s) URL导出取消条数限制
2019-02-27 09:27:54 +08:00
leijun
c690c68aad vpn cgi 接口参数配置 2019-02-26 17:42:56 +08:00
leijun
9b2f41cd39 vpn cgi接口服务 报错信息调整 2019-02-26 17:41:25 +08:00
段冬梅
88199a222b 去掉配置文件中重复部分 2019-02-25 10:38:06 +08:00
dongxiaoyan
7583c01432 调整APP相关趋势图数据比较接近时的颜色区分 2019-02-25 09:46:09 +08:00
dongxiaoyan
6d9060bb49 调整app趋势图透明度,添加纵轴单位 2019-02-25 09:45:30 +08:00
段冬梅
2b452af4b3 冲突解决 2019-02-25 09:45:12 +08:00
zhanghongqing
c5aae2302c 流量统计app详情趋势统计图增加Gbps、PPS单位切换统计,导出图片增加标题与时间
(cherry picked from commit 2dd73adfbb)

Conflicts:
	src/main/resources/nis.properties
2019-02-25 09:43:37 +08:00
段冬梅
a8468064d6 增加两个接口
trafficAppBpsTrend
trafficAppPpsTrend
2019-02-22 18:31:12 +08:00
zhanghongqing
ba3aeb199f 流量统计app详情趋势统计图增加Gbps、PPS单位切换统计,导出图片增加标题与时间
Conflicts:
	src/main/resources/nis.properties
2019-02-22 18:30:27 +08:00
段冬梅
d8a5ecf8ab 配置统计表增加配置的审核时间audit_time,配置统计存储过程修改 2019-02-22 14:19:55 +08:00
段冬梅
043cb275dc 客户端用户密码修改BUG更改;
客户端用户只有取消审核通过和删除的策略时,允许删除此用户;
客户端用户修改成功后,给出提示信息。
2019-02-21 10:55:26 +08:00
段冬梅
60392b2493 密码修改清理缓存时,由用户名清理缓存修改为登录ID来清理用户缓存。 2019-02-21 09:42:30 +08:00
段冬梅
a2f311f18c 修复客户端账号管理和SNAT策略导出选中配置出错BUG 2019-02-20 18:02:17 +08:00
dongxiaoyan
220b3be2b0 日志趋势图提示信息国际化
(cherry picked from commit ae4cca4dfe)

(cherry picked from commit 96656f24cf)
2019-02-20 10:19:56 +08:00
dongxiaoyan
668c435862 修改提示信息“No data to display”为“No data display within a specified time
range”;
时间格式化错误:最后的“。000”

(cherry picked from commit f3d4f0deec)

(cherry picked from commit bb6668d00f)
2019-02-20 10:19:26 +08:00
dongxiaoyan
47966248dc 1、根据 刘老师和园园要求注释掉:“CEIEC All Rights Reserved,CEIEC ©”;
2、提示信息:“未找到该菜单!”修改为“The menu was not found!”,未国际化,以后考虑国际化;
3、提示信息:“缓存清理成功”修改为“Cache Cleaning Successful!”,未国际化,以后考虑国际化;
4、提示信息:“缓存清理失败”修改为“Cache Cleanup Failure!”,未国际化,以后考虑国际化;
5、部分页面乱码修改;

(cherry picked from commit e2292598e9)

(cherry picked from commit 3639363a9b)
2019-02-20 09:46:46 +08:00
dongxiaoyan
8b60648f3e TrafficPort趋势图单位由bytes改为 :Link Numbers
(cherry picked from commit fda327e4c1)

(cherry picked from commit 446c8884ad)
2019-02-18 19:27:50 +08:00
zhanghongqing
745076678a 修改复制提示信息copyied为copied 2019-02-15 10:00:17 +08:00
duandongmei
22ed019dbd app的DNS Spoofing选项在提交之前未展示,置为disable 2019-01-30 20:01:26 +06:00
duandongmei
737833492b 白名单的ipForm界面去掉误写的aa串 2019-01-30 17:32:26 +06:00
zhangwei
edb9f11b92 1.暂时取消对定时任务配置的限制操作;
2.增加定时器的国际化code
2019-01-30 15:47:43 +06:00
tanghao
be3811688f 修复导出超过限制页面卡死BUG(丢失代码恢复) 2019-01-30 14:31:34 +08:00
zhangwei
851fb85ca1 修改定时器表单中的国际化code 2019-01-29 14:31:57 +06:00
zhangwei
2dadd96484 定时器增加长期生效选项,长期生效只有生效时间【开始时间】,无失效时间【结束时间】。 2019-01-29 14:25:09 +06:00
zhangwei
0ebee67507 Merge branch 'develop_no_common_group' of https://git.mesalab.cn/K18_NTCS_WEB/NTC.git into develop_no_common_group 2019-01-29 14:23:43 +06:00
duandongmei
85f09a60be 单元格的值存储Map增加key重复性判断 2019-01-29 12:32:20 +06:00
fangshunjian
fa20de4df1 1、修改ddos,音视频保存定时任务信息cronValid 和 cronInvalid 字段出错的问题
Conflicts:
	src/main/webapp/WEB-INF/views/cfg/ddosIpCfgForm.jsp
2019-01-29 09:49:57 +06:00
duandongmei
2abffe2e34 26号之前的asn ip导入版本,区分ipv4和ipv6,v4和v6互不影响 2019-01-29 09:28:36 +06:00
duandongmei
32d4ad3cd7 导入处理无数据的单元格,记录所有有数据的单元格及下标,最后将无数据的单元格根据下标补全。 2019-01-29 09:27:47 +06:00
duandongmei
453ed153bc IP Spoofing的action导出由redirect修改为Spoofing
(cherry picked from commit 7bfcbe614a)
2019-01-28 22:11:24 +08:00
chenjinsong
c458bb0e6b 修复日志导出:
去掉IP Spoofing的修改;
bgp导出无action合并


Conflicts:
	src/main/java/com/nis/util/excel/ExcelCsv.java


(cherry picked from commit b57176c6c1)
2019-01-28 22:10:58 +08:00
zhangwenqing
b307bffb26 修复BUG:
1.修复DDOS配置流量阈值(Bps)/(Pps)默认值Bug
2.修正配置导入域名字段错误提示信息
3.SNAT/DNAT复用策略配置 暂不支持 跳转日志检索
4.缓存策略配置导出忽略doLog(与界面列表一致)
5.修复音视频样例配置上传文件二次选择取消后文件框中的文件名还存在
6.修复特定服务管理新增报错

(cherry picked from commit 11424ee91d)
2019-01-28 22:08:56 +08:00
zhanghongqing
e940073eae 修改界面delete按钮样式
Conflicts:
	src/main/webapp/WEB-INF/tags/sys/delRow.tag
2019-01-28 22:07:56 +08:00
shangguanyanfei
07b7040df4 1.业务配置-导入摸板修改 来函下拉框显示内容(改为只显示通过的来函)
2.业务配置模块页面-筛选按钮中的来函下拉框改为显示(通过的和配置取消的来函)

(cherry picked from commit 7c93338dce)
2019-01-28 21:29:02 +08:00
zhangwei
8d8a6dc97e 修改增加了定时器的业务配置列表,调整生效标识(is_valid)位置,增加定时器标识显示。
Conflicts:
	src/main/webapp/WEB-INF/views/cfg/intercept/interceptList.jsp
2019-01-28 21:28:37 +08:00
zhanghongqing
4a627eacaa 配置导出统一显示全部区域显示,子配置中去掉日志总量,在主配置显示
(cherry picked from commit 715e9b3c73)
2019-01-28 21:14:53 +08:00
tanghao
ecdaa47d8a 1.首页面退出操作字体未对齐
2.基本配置-用户管理-新增用户bug
3.ASN IP配置导出bug(实际为公共界面所有超过阈值导出共性BUG)
4.ASN IP下拉框onchange事件

(cherry picked from commit 355fa8e3cb)
2019-01-28 21:14:17 +08:00
shangguanyanfei
98747b329b 业务配置-stream模块导出-阻断类型中 阻断 改为 封堵(丢弃)
(cherry picked from commit a7d22d463d)
2019-01-28 21:11:59 +08:00
zhangwei
26078a9cd1 修改编译jdk版本为1.8
(cherry picked from commit 3373978073)
2019-01-28 21:10:55 +08:00
zhanghongqing
776dc47ad6 配置导出时是否区分大小写时,为是时导出无显示问题解决,日志http网页关键字查询是选择关键字监测/封堵时界面对应列显示不同国际化问题解决。
(cherry picked from commit 14e3b828db)
2019-01-28 21:10:00 +08:00
zhangwenqing
faf8f45585 修复缓存策略配置、IP分组管理、DNS分组管理导出黑屏bug
(cherry picked from commit c9d7512a1b)
2019-01-28 21:07:58 +08:00
zhangwei
e33e91cb46 url白名单修改下发的maat的业务表名不做特殊处理。
(cherry picked from commit 0fb4bf08a4)
2019-01-28 20:58:37 +08:00
zhangwenqing
90ffb5388f 修复APP特征配置导入bug
Conflicts:
	src/main/java/com/nis/web/controller/BaseController.java
2019-01-28 20:55:12 +08:00
zhanghongqing
6931832c8c ddos日志去掉client查询条件,攻击类型在字典界面设置保留DNS_Flood,NTP_Flood,SYN_Flood
Conflicts:
	src/main/webapp/WEB-INF/views/log/ntc/ddosList.jsp
2019-01-28 20:40:47 +08:00
王鑫
281ea2f2a9 Revert "新增编辑在帮助文档功能"
This reverts commit ea13a037e8
2019-01-28 20:17:08 +08:00
dongxiaoyan
a4c566089f add_pool_nam补充完整add_pool_name
(cherry picked from commit 3daab5e49d)
2019-01-28 20:13:02 +08:00
dongxiaoyan
049550dc1c 添加默认动态ip池,并修改cfgid为0
(cherry picked from commit e5e63af738)
2019-01-28 20:12:36 +08:00
wangwenrui
ea13a037e8 新增编辑在帮助文档功能
(cherry picked from commit 1d5905fe47)
2019-01-28 20:12:11 +08:00
张微
b2bfd83e1f Update README.md 2019-01-28 18:08:44 +08:00
zhanghongqing
00f40e6394 修改流量统计中协议详情跟网站详情界面按钮下移问题 2019-01-28 15:27:02 +06:00
duandongmei
40ad762853 ip白名单打开方向属性 2019-01-28 13:56:56 +06:00
duandongmei
e319a19135 多删除了commit提交语句bug更改 2019-01-28 09:50:07 +06:00
duandongmei
de813e15d9 Merge branch 'feature-traffic-log' of https://git.mesalab.cn/K18_NTCS_WEB/NTC.git into feature-traffic-log 2019-01-27 20:01:06 +06:00
zhangwei
2febc9e5b7 临时修复apphttp,dns,ssl特征的导入 2019-01-27 19:32:56 +06:00
duandongmei
a7914aafac asn统计updatesql,不分批次提交 2019-01-27 18:15:14 +06:00
duandongmei
10e0064556 关键字转url,来函为null的情况修复 2019-01-27 13:39:07 +06:00
duandongmei
18491f2644 修复ASN v4和v6串列bug 2019-01-27 11:55:59 +06:00
zhangwei
2db43e69d9 合并develop分支定时器功能
Conflicts:
	src/main/java/com/nis/domain/configuration/BaseCfg.java
	src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp
2019-01-27 11:06:46 +06:00
zhangwei
c1c5c8f5bb 修改定时器后台运行时无shiro权限导致根据functionId查询配置时引起的bug,查询菜单功能名称在menuCode方法中设置 2019-01-27 10:32:50 +06:00
duandongmei
1c2833ee8e asn v6_num国际化更改;
asngrouplist界面asnip数获取bug更改
2019-01-27 10:19:01 +06:00
zhanghongqing
8c70356e44 修改流量统计滚动条文字对齐bug 2019-01-26 20:31:34 +06:00
zhangwei
41e5202cbf Merge branch 'feature-traffic-log' of https://git.mesalab.cn/K18_NTCS_WEB/NTC.git into feature-traffic-log 2019-01-26 20:20:40 +06:00
zhangwei
9d6e3a3d4a 增加定时器功能
Conflicts:
	src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp
2019-01-26 20:18:01 +06:00
duandongmei
63882ac75e ddos的检索条件client ip去掉 2019-01-26 20:14:45 +06:00
duandongmei
0a76ce337a ASN定时计算v4和v6的IP个数;
界面展示ASNIPv4和v6数

Conflicts:
	src/main/java/com/nis/web/dao/basics/AsnGroupInfoDao.java
	src/main/java/com/nis/web/dao/basics/AsnGroupInfoDao.xml
	src/main/java/com/nis/web/dao/basics/AsnIpCfgDao.java
	src/main/java/com/nis/web/dao/basics/AsnIpCfgDao.xml
	src/main/resources/messages/message_en.properties
	src/main/resources/messages/message_ru.properties
	src/main/webapp/WEB-INF/views/basics/asnGroupList.jsp
2019-01-26 20:13:44 +06:00
zhangwei
5c63f85483 定时器表单提交 2019-01-26 19:53:19 +06:00
zhangwei
2181a420b9 拦截策略无业务日志,删除日志总量一列 2019-01-26 19:45:14 +06:00
zhangwei
5d86fb0fd4 拦截策略列表删除doLog显示 2019-01-26 19:43:26 +06:00
zhangwei
9b304e3c13 增加定时器
Conflicts:
	src/main/resources/messages/message_en.properties
	src/main/webapp/WEB-INF/views/cfg/ipaddr/ipList.jsp
2019-01-26 19:23:00 +06:00
duandongmei
87e07376fa 修复asnip配置取消之后修改,is_audit状态未修改为0的问题 2019-01-25 17:48:58 +06:00
duandongmei
736c4cda04 16号之前的版本asn还是为单独业务,检索条件区分asn的block和monitor 2019-01-25 17:46:49 +06:00
zhangwei
a2dc1dd6f5 修改doLog的参数描述
(cherry picked from commit 52fe56b59d)
2019-01-25 09:45:29 +08:00
zhangwei
787484c721 修改通联关系日志中的查询条件描述domain->web
(cherry picked from commit d51da59143)
2019-01-25 09:45:17 +08:00
zhangwei
5c8b81c67e dns业务去掉do_blacklist选项的显示
(cherry picked from commit 8bb1c6c857)
2019-01-25 09:44:55 +08:00
duandongmei
56e9cebe26 保护名单提示、正在提交、登出的国际化更新
(cherry picked from commit 25e6fa4a3f)
2019-01-25 09:44:36 +08:00
duandongmei
469c753161 domain和url域新增时增加警告提示信息【后期需在审核时也增加此警告】。
保护名单信息杨威提供后,再进行完善

(cherry picked from commit ea82be590e)
2019-01-24 17:40:18 +08:00
zhanghongqing
72b88b09c4 修改流量统计首页滚动条数字对齐
(cherry picked from commit 2ca0a4714dfedbea53272f43169e4cf502e377f9)

(cherry picked from commit 1a6e771458)
2019-01-24 16:13:04 +08:00
leijun
3e706f7027 SNAT地址池添加一条动态地址池信息
app域名特征添加拦截强度

(cherry picked from commit 1d71820d1ee3fbd21f201af14781849de9fb75a3)

(cherry picked from commit e14cca6824)
2019-01-24 16:12:46 +08:00
zhangwenqing
498fee3727 修正Ip Spoofing配置导入模板'direction'字段默认值批注;修改配置导入域名字段校验;修复配置导入属性验证发生异常后无提示信息问题(王鑫)
(cherry picked from commit 38f563ceee07bfdaa4d94cc5ca6f712edb894d40)
2019-01-24 16:10:14 +08:00
tanghao
1f4618ae7f 修复流量B和b换算问题
(cherry picked from commit 3cd969978e)
2019-01-24 09:52:06 +08:00
zhanghongqing
1f024e6b81 修改用户行为查询时间设置
(cherry picked from commit 6fe94fa3b8e8a9e6a8ed1ae3454db78fa5eb9c1d)

(cherry picked from commit 57793c7264)
2019-01-24 09:51:47 +08:00
duandongmei
839f06b495 js国际化增加crlCheck信息,俄文国际化翻译
(cherry picked from commit 6885d467cb)
2019-01-24 09:51:24 +08:00
duandongmei
e3bade38b9 国际化俄文翻译,并且去掉重复的desc国际化
(cherry picked from commit e5ce04e34b)
2019-01-24 09:51:05 +08:00
duandongmei
1346fd1bfc 修复拥有用户管理权限的用户,修改其他用户密码后不生效问题。
(cherry picked from commit fa42935d46)
2019-01-24 09:50:39 +08:00
zhanghongqing
da24fa3b84 修改日志详情中title判断条件
(cherry picked from commit a464bd9443)
2019-01-23 10:16:45 +08:00
zhangwei
ee20daadb3 新增定时任务相关国际化字典
(cherry picked from commit 3087e5baf3)
2019-01-23 10:16:25 +08:00
李皓宸
a80c9267df 日志检索->流量日志->邮件泛收和SSL泛收 移除cfgId查询条件,解决Js报错问题
(cherry picked from commit 52bf2d3415)
2019-01-23 10:16:05 +08:00
李皓宸
b0a6fe7c86 1.日志检索->国家代理->HTTP(S) 界面 原始请求体和原始应答体 列数据 增加点击下载功能
2.实时报表->流量统计->流量统计和协议统计 界面 "方向"查询条件增加"请选择"选项(默认)

(cherry picked from commit ee411339c8)
2019-01-23 10:15:52 +08:00
zhanghongqing
493c5e7c63 增加国际化配置,流量统计首页滚动条调整,保留两位小数
(cherry picked from commit 3bf485b920)
2019-01-23 10:15:32 +08:00
leijun
ad310f6d48 日志检索-snat、dnat复用策略 页面标题国际化对应调整
(cherry picked from commit ab157b82db)
2019-01-23 10:15:08 +08:00
tanghao
86365ad7b1 bps计算保留两位小数展示
(cherry picked from commit 79de7b51df)
2019-01-23 10:14:52 +08:00
zhanghongqing
372232d206 修改鼠标点击列表copy中的的空格,去掉
(cherry picked from commit 0ed34ac938)
2019-01-23 10:14:33 +08:00
zhanghongqing
4dfd9b2d70 补充提交去掉注释
(cherry picked from commit 2eb2cd366e)
2019-01-23 10:14:01 +08:00
zhanghongqing
f105fca9a7 解决日志详情中文字带换行空格问题
(cherry picked from commit b03ec51aa4)
2019-01-23 10:13:35 +08:00
zhanghongqing
c4db370870 流量统计修改国际化名称
(cherry picked from commit 37dfdf1e3b)
2019-01-23 10:13:01 +08:00
李皓宸
0756af0d6e 日志检索->国家代理->HTTP(S) 修正界面无法显示原始请求体和原始应答体数据问题
(cherry picked from commit 859b3c72f9)
2019-01-23 10:12:28 +08:00
duandongmei
daac82f77a 证书crl去掉必填校验 2019-01-22 10:27:18 +06:00
zhangwei
f71711ed8f 修改日志客户端服务器端位置的国际化
(cherry picked from commit 9d190788b1)
2019-01-21 23:53:26 +08:00
leijun
5b8a342625 通联日志重置后默认选中other
(cherry picked from commit 7d08ab8539)
2019-01-21 23:53:11 +08:00
tanghao
d9f5398fc6 1.修改bps计算方式 改为Gbps
2.调动pps以及bps页面位置

(cherry picked from commit e0661fbed4)
2019-01-21 23:52:47 +08:00
zhanghongqing
8d6d6da7f3 流量统计滚动条做动态单位换算
(cherry picked from commit 23c118c6b7)
2019-01-21 23:52:25 +08:00
duandongmei
44ea7d6ca2 //修改html特殊字符转换方法名
escapIntypeHtml

(cherry picked from commit b5d1b281a0)
2019-01-21 23:52:01 +08:00
zhanghongqing
cca47e3823 去掉通联关系日志界面运营商展示,去掉流量统计app详情趋势运营商展示,同时修改导出去掉运营商列,app跳转到app详情界面时携带地域条件
(cherry picked from commit d0b4907271)
2019-01-21 23:51:12 +08:00
duandongmei
f8a90c0c8f 修复配置界面中下拉选择检索条件,js使用el表达式赋值时存在html特殊字符未转换问题;
导入字符串字段增加escapeHtml4转换;
域名校验不使用完整的域名格式校验。

(cherry picked from commit a1f8e1779a)
2019-01-21 23:50:53 +08:00
zhangwenqing
e412d22569 修改关注网站配置导入 主题、网站大小写不敏感;修改App Ip配置导入模板
Conflicts:
	src/main/java/com/nis/web/controller/BaseController.java
2019-01-21 23:50:13 +08:00
李皓宸
4ed438f8aa 1.日志检索->协议->邮箱 增加 动作 查询条件,选"动作"时传入监测和阻断对应的Service
2.实时报表->流量统计和协议统计 增加 方向 查询条件,out为0 in为1

(cherry picked from commit 3612bf09d9)
2019-01-21 23:40:37 +08:00
zhanghongqing
77f9d927be 调整流量统计滚动条数据列对齐,traffic中/S改为/s,请求方法改为post防止缓存,请求时间改为5分钟一次,traffic数据为当前时间15分钟内数据,其它滚动条为当前时间一小时数据。
(cherry picked from commit 3602e2f1c3)
2019-01-21 23:39:47 +08:00
zhangwenqing
abbb76031b 修改关注网站配置导入模板
(cherry picked from commit fa7fa0c859)
2019-01-21 23:39:22 +08:00
zhanghongqing
5ee58bc895 流量统计in/out改为大写,流量统计app趋势reset改为默认当前时间一小时
(cherry picked from commit 8d42cab7e2)
2019-01-21 23:37:51 +08:00
zhanghongqing
a437417da1 通联关系日志展示运营商,修复排序功能
(cherry picked from commit 698fd13a65)
2019-01-21 23:31:36 +08:00
leijun
b41f0d8ad5 VPN服务器
新增添加IP重复验证
删除验证是否被IP复用-用户管理使用
IP复用-用户管理 删除验证是否被snat策略和dnat策略使用

(cherry picked from commit 436190fe8c)

Conflicts:
	src/main/resources/messages/message_en.properties
	src/main/resources/messages/message_ru.properties
	src/main/resources/messages/message_zh_CN.properties
2019-01-21 23:30:55 +08:00
duandongmei
9ff1643e30 1月16号之前的asn版本修改组织输入为asn 号输入 2019-01-21 18:26:22 +06:00
duandongmei
7e1875b384 证书增加crl参数的输入,并增加crl的格式校验
(cherry picked from commit ae283564cb)
2019-01-21 16:39:39 +08:00
zhangwei
aa5eccf995 修改拦截策略的证书信息校验规则:
1. Keyring的下拉列表显示全部已生效的证书;
2. 如选择了实体证书,必须配置域名,或者IP与域名的组合配置;
3.
域名配置,如匹配方式为完全匹配,则域名必须与所选择的实体证书的CN和SAN相同。如匹配方式为后缀匹配,则域名须与所选择的实体证书的CN和SAN后缀相同;
4. 如选择了中间证书或者根证书,则可配置IP,或者域名,或者两者组合;

Conflicts:
	src/main/resources/messages/message_en.properties
	src/main/resources/messages/message_ru.properties
	src/main/resources/messages/message_zh_CN.properties
2019-01-19 17:59:57 +06:00
zhangwei
9e6e2fbd37 验证代理对象的证书是否被拦截策略引用,如被引用,则证书配置不能取消。 2019-01-19 17:53:52 +06:00
duandongmei
104d06fd19 ASN的ASN IP域的ASN_ID自定义域格式同ASN关键字域配置.
ASN IP:ASN_ID=AS123
ASN:AS123
2019-01-19 11:25:55 +06:00
zhangwei
216c64b031 修改asn查询条件 2019-01-18 16:33:16 +06:00
王鑫
25ea439564 Merge branch 'cherry-pick-2d4a1a66' into 'feature-traffic-log'
流量统计app趋势及apptop100增加isp运营商查询条件

See merge request K18_NTCS_WEB/NTC!5
2019-01-18 16:49:32 +08:00
zhanghongqing
d225b81903 流量统计app趋势及apptop100增加isp运营商查询条件
(cherry picked from commit 2d4a1a6685)
2019-01-18 16:49:15 +08:00
王鑫
b1ee15772b Merge branch 'cherry-pick-7210fca1' into 'feature-traffic-log'
1.修复IP top10 使用类型报错 由integer改为Long

See merge request K18_NTCS_WEB/NTC!4
2019-01-18 16:48:11 +08:00
tanghao
84e691d03b 1.修复IP top10 使用类型报错 由integer改为Long
2.Bps修正为bps

(cherry picked from commit 7210fca18f)
2019-01-18 16:47:40 +08:00
王鑫
0409a5f8c8 Merge branch 'cherry-pick-99dad7c0' into 'feature-traffic-log'
恢复原Gbps单位

See merge request K18_NTCS_WEB/NTC!3
2019-01-18 16:46:42 +08:00
dongxiaoyan
6a5b07f8ce 恢复原Gbps单位
(cherry picked from commit 99dad7c0a4)
2019-01-18 16:45:44 +08:00
wangxin
de8496e003 ASN 版本恢复1月4号之版本 2019-01-18 16:21:20 +08:00
938 changed files with 155270 additions and 3206 deletions

View File

@@ -28,11 +28,6 @@
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_144">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/jersey-client-2.23.1.jar">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
@@ -158,5 +153,10 @@
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

View File

@@ -1,13 +1,13 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.compiler.source=1.8

View File

@@ -2,8 +2,8 @@
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.7"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="jst.jaxrs" version="1.1"/>
<installed facet="maven" version="1.0"/>
<installed facet="java" version="1.8"/>
</faceted-project>

View File

@@ -1 +1 @@
gk for web
在公共分组功能逻辑完善之前此分支为ntc界面系统的全集上线升级分支合并版。

18
pom.xml
View File

@@ -710,5 +710,23 @@
<artifactId>jersey-apache-connector</artifactId>
<version>2.23.1</version>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,31 @@
package com.nis.domain;
/**
* Created by dell on 2018-8-30.
*/
public class Nets {
private String StartIP;
private String EndIP;
private String NetMask;
public String getStartIP() {
return StartIP;
}
public void setStartIP(String startIP) {
StartIP = startIP;
}
public String getEndIP() {
return EndIP;
}
public void setEndIP(String endIP) {
EndIP = endIP;
}
public String getNetMask() {
return NetMask;
}
public void setNetMask(String netMask) {
NetMask = netMask;
}
}

View File

@@ -0,0 +1,43 @@
package com.nis.domain;
import com.nis.domain.configuration.BaseCfg;
/**
* 定时任务信息 schedule_info
* @author ThinkPad
*
*/
public class ScheduleCfg extends BaseCfg<ScheduleCfg>{
private static final long serialVersionUID = 7151915080876949497L;
private String name;//定时任务名称,预留
private String cronValid;//生效cron表达式
private String cronInvalid;//失效cron表达式
private String whereStr;//动态where 条件
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCronValid() {
return cronValid;
}
public void setCronValid(String cronValid) {
this.cronValid = cronValid;
}
public String getCronInvalid() {
return cronInvalid;
}
public void setCronInvalid(String cronInvalid) {
this.cronInvalid = cronInvalid;
}
public String getWhereStr() {
return whereStr;
}
public void setWhereStr(String whereStr) {
this.whereStr = whereStr;
}
}

View File

@@ -0,0 +1,66 @@
package com.nis.domain;
import java.util.Date;
import com.nis.domain.configuration.BaseCfg;
/**
* 定时任务执行信息 schedule_exce_log/schedule_exce_new
* `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`schedule_id` bigint(20) NOT NULL COMMENT 'schedule_info 表的主键',
`exce_time` datetime DEFAULT NULL COMMENT '最新执行时间',
`issue_status` int(255) DEFAULT NULL COMMENT '下发状态1生效0失效',
`issue_result` int(255) DEFAULT NULL COMMENT '下发结果1成功0失败',
`error_info` varchar(255) DEFAULT NULL COMMENT '下发失败原因',
`compile_id` bigint(20) DEFAULT NULL COMMENT '编译id',
* @author fang
*
*/
public class ScheduleExceInfo extends BaseCfg<ScheduleExceInfo>{
private static final long serialVersionUID = 7151915080876949497L;
private Long scheduleId;//定时器id
private Date exceTime;//下发时间
private Integer issueStatus;//下发 的状态
private Integer issueResult;//下发结果
private String errorInfo;//动态where 条件
private Integer isIssue;//是否需要下发配置1需要0不需要
public Long getScheduleId() {
return scheduleId;
}
public void setScheduleId(Long scheduleId) {
this.scheduleId = scheduleId;
}
public Date getExceTime() {
return exceTime;
}
public void setExceTime(Date exceTime) {
this.exceTime = exceTime;
}
public Integer getIssueStatus() {
return issueStatus;
}
public void setIssueStatus(Integer issueStatus) {
this.issueStatus = issueStatus;
}
public Integer getIssueResult() {
return issueResult;
}
public void setIssueResult(Integer issueResult) {
this.issueResult = issueResult;
}
public String getErrorInfo() {
return errorInfo;
}
public void setErrorInfo(String errorInfo) {
this.errorInfo = errorInfo;
}
public Integer getIsIssue() {
return isIssue;
}
public void setIsIssue(Integer isIssue) {
this.isIssue = isIssue;
}
}

View File

@@ -39,6 +39,9 @@ public class AppTopicDomainCfg extends BaseCfg<AppTopicDomainCfg> {
@ExcelField(title="topic",dictType="TOPIC",sort=2)
private Long topicId;
private String topic;
private String websiteService;
/**
* 表达式类型
*/
@@ -180,4 +183,20 @@ public class AppTopicDomainCfg extends BaseCfg<AppTopicDomainCfg> {
this.websiteServiceId = websiteServiceId;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getWebsiteService() {
return websiteService;
}
public void setWebsiteService(String websiteService) {
this.websiteService = websiteService;
}
}

View File

@@ -16,6 +16,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.nis.domain.BaseEntity;
import com.nis.domain.ScheduleCfg;
import com.nis.domain.SysMenu;
import com.nis.util.Constants;
import com.nis.util.StringUtil;
@@ -60,6 +61,14 @@ public class BaseCfg<T> extends BaseEntity<T> implements Cloneable{
protected Integer compileIsIssued;
protected String exType;//导出类型
protected String hColumns;//导出隐藏列
/**
* 定时任务信息
*/
//protected List<ScheduleCfg> schedules;
/**
* 定时任务信息2019年1月18日18:54:53 修改
*/
protected ScheduleCfg schedule;
private String commonGroupIds; //公共组织id(考虑一个compile存在多个asn组织的情况)
public String getCommonGroupIds() {
@@ -350,26 +359,24 @@ public class BaseCfg<T> extends BaseEntity<T> implements Cloneable{
*/
public void setFunctionId(Integer functionId) {
this.functionId = functionId;
if(!StringUtil.isEmpty(functionId) && StringUtil.isEmpty(this.menuNameCode)){
List<SysMenu> list = UserUtils.getMenuList();
}
public String getMenuNameCode() {
if(!StringUtil.isEmpty(this.functionId) && StringUtil.isEmpty(menuNameCode)){
List<SysMenu> list = UserUtils.getMenuCfgList();
if(!StringUtil.isEmpty(list)) {
for (SysMenu menu :list) {
if (!StringUtil.isEmpty(menu.getCode())
&&menu.getFunctionId()!=null
&& menu.getFunctionId().equals(functionId)
&& menu.getFunctionId().equals(this.functionId)
//&& menu.getFunctionId().equals(functionId)
) {
this.setMenuNameCode(menu.getCode());
break;
}
}
}
}
}
public String getMenuNameCode() {
return menuNameCode;
}
public void setMenuNameCode(String menuNameCode) {
@@ -982,5 +989,12 @@ public class BaseCfg<T> extends BaseEntity<T> implements Cloneable{
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
public ScheduleCfg getSchedule() {
return schedule;
}
public void setSchedule(ScheduleCfg schedule) {
this.schedule = schedule;
}
}

View File

@@ -75,7 +75,7 @@ public class BaseIpCfg extends BaseCfg<BaseIpCfg> {
protected String organization; //仅用于copy属性使用
protected String country; //仅用于copy属性使用
protected String detail; //仅用于copy属性使用
@ExcelField(title="log_total",sort=42)
// @ExcelField(title="log_total",sort=42)
private Long totalLogs;
public String getOrganization() {

View File

@@ -238,7 +238,13 @@ public class BaseStringCfg<T> extends BaseCfg<T> {
for (int i = 0; i < list.size(); i++) {
BaseStringCfg base=(BaseStringCfg)list.get(i);
base.setIsHex(base.getIsHexbin());
base.setIsCaseInsenstive(base.getIsHexbin());
// base.setIsCaseInsenstive(base.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(base.getIsHexbin()==2){
base.setIsCaseInsenstive(1);
}else{
base.setIsCaseInsenstive(0);
}
base.setCfgKeywords(Functions.replace(base.getCfgKeywords(), "***and***"," "));
}
return list;
@@ -248,7 +254,13 @@ public class BaseStringCfg<T> extends BaseCfg<T> {
for (int i = 0; i < list.size(); i++) {
BaseStringCfg base=(BaseStringCfg)list.get(i);
base.setIsHex(base.getIsHexbin());
base.setIsCaseInsenstive(base.getIsHexbin());
// base.setIsCaseInsenstive(base.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(base.getIsHexbin()==2){
base.setIsCaseInsenstive(1);
}else{
base.setIsCaseInsenstive(0);
}
}
return list;
}

View File

@@ -211,7 +211,12 @@ public class ComplexkeywordCfg extends BaseCfg<ComplexkeywordCfg>{
for (int i = 0; i < list.size(); i++) {
ComplexkeywordCfg base=(ComplexkeywordCfg)list.get(i);
base.setIsHex(base.getIsHexbin());
base.setIsCaseInsenstive(base.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(base.getIsHexbin()==2){
base.setIsCaseInsenstive(1);
}else{
base.setIsCaseInsenstive(0);
}
base.setCfgKeywords(Functions.replace(base.getCfgKeywords(), "***and***"," "));
}
return list;

View File

@@ -29,6 +29,8 @@ public class DdosIpCfg extends BaseIpCfg {
private Long bpsThreadshold;// 即DDoS攻击保护动作触发阈值每秒Bit数和每秒包数
@ExcelField(title="pps_threadshold",sort=48)
private Long ppsThreadshold;
@ExcelField(title="log_total",sort=42)
private Long totalLogs;
public String getAntiddosProtocol() {
return antiddosProtocol;
@@ -54,6 +56,12 @@ public class DdosIpCfg extends BaseIpCfg {
public void setIndexTable(String indexTable) {
this.indexTable = indexTable;
}
public Long getTotalLogs() {
return totalLogs;
}
public void setTotalLogs(Long totalLogs) {
this.totalLogs = totalLogs;
}
}

View File

@@ -0,0 +1,34 @@
package com.nis.domain.configuration;
import java.util.Date;
import com.nis.domain.BaseEntity;
import com.nis.util.excel.ExcelField;
public class HelpInfo extends BaseEntity<HelpInfo>{
private static final long serialVersionUID = 2451757008384840494L;
private String fileName;
private String fileComment;
private String backFileComment;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileComment() {
return fileComment;
}
public void setFileComment(String fileComment) {
this.fileComment = fileComment;
}
public String getBackFileComment() {
return backFileComment;
}
public void setBackFileComment(String backFileComment) {
this.backFileComment = backFileComment;
}
}

View File

@@ -0,0 +1,15 @@
package com.nis.domain.configuration.template;
import com.nis.util.excel.ExcelField;
public class BlackListComplexStringTemplate extends ComplexStringAllTemplate {
private Integer doBlackList;
@ExcelField(title="doBlacklist",align=2,sort=3)
public Integer getDoBlackList() {
return doBlackList;
}
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
}

View File

@@ -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=3)
public Integer getDoBlackList() {
return doBlackList;
}
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
}

View File

@@ -0,0 +1,15 @@
package com.nis.domain.configuration.template;
import com.nis.util.excel.ExcelField;
public class BlackListP2pHashStringTemplate extends P2pHashStringTemplate {
private Integer doBlackList;
@ExcelField(title="doBlacklist",align=2,sort=4)
public Integer getDoBlackList() {
return doBlackList;
}
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
}

View File

@@ -0,0 +1,15 @@
package com.nis.domain.configuration.template;
import com.nis.util.excel.ExcelField;
public class BlackListP2pIpTemplate extends P2pIpTemplate {
private Integer doBlackList;
@ExcelField(title="doBlacklist",align=2,sort=4)
public Integer getDoBlackList() {
return doBlackList;
}
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
}

View File

@@ -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=3)
public Integer getDoBlackList() {
return doBlackList;
}
public void setDoBlackList(Integer doBlackList) {
this.doBlackList = doBlackList;
}
}

View File

@@ -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;
}
}

View File

@@ -8,7 +8,6 @@
*/
package com.nis.domain.configuration.template;
import com.google.gson.JsonObject;
import com.nis.util.excel.ExcelField;
/**

View File

@@ -16,7 +16,7 @@ import com.nis.util.excel.ExcelField;
public class P2pHashStringTemplate extends StringAllTemplate {
private String userRegion1;
@ExcelField(title="p2p_hash_type",dictType="P2P_HASH_TYPE",align=2,sort=2)
@ExcelField(title="p2p_hash_type",dictType="P2P_HASH_TYPE",align=2,sort=3)
public String getUserRegion1() {
return userRegion1;
}

View File

@@ -10,7 +10,7 @@ public class P2pIpTemplate extends IpAllTemplate {
private String userRegion2;
@ExcelField(title="p2p_ip_config_type",dictType="P2P_IP_TYPE",align=2,sort=2)
@ExcelField(title="p2p_ip_config_type",dictType="P2P_IP_TYPE",align=2,sort=3)
public String getUserRegion2() {
return userRegion2;
}

View File

@@ -7,28 +7,12 @@ import com.nis.util.excel.ExcelField;
* @author dell
*
*/
public class TopicWebsiteTemplate extends StringAllTemplate{
public class TopicWebsiteTemplate extends StringAllNotDoLogTemplate{
private Long topicId; // 主题
private Long websiteServiceId; // 网站
private String topic; // 主题
private String websiteService; // 网站
private String cfgKeywords; // 域名
@ExcelField(title="topic",dictType="TOPIC",sort=2)
public Long getTopicId() {
return topicId;
}
public void setTopicId(Long topicId) {
this.topicId = topicId;
}
@ExcelField(title="website_server",dictType="WEBSITE_SERVER",sort=3)
public Long getWebsiteServiceId() {
return websiteServiceId;
}
public void setWebsiteServiceId(Long websiteServiceId) {
this.websiteServiceId = websiteServiceId;
}
@ExcelField(title="domain_name",sort=4)
public String getCfgKeywords() {
return cfgKeywords;
@@ -36,5 +20,21 @@ public class TopicWebsiteTemplate extends StringAllTemplate{
public void setCfgKeywords(String cfgKeywords) {
this.cfgKeywords = cfgKeywords;
}
@ExcelField(title="topic",sort=2)
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
@ExcelField(title="website_server",sort=3)
public String getWebsiteService() {
return websiteService;
}
public void setWebsiteService(String websiteService) {
this.websiteService = websiteService;
}
}

View File

@@ -18,6 +18,7 @@ public class SysIspInfo implements Serializable {
private Integer ispKeyCode;// 运营商唯一标识编码,
private Date createTime;
private String ispNum; // 出入口跟设备号拼接
public Long getId() {
return id;
@@ -67,6 +68,11 @@ public class SysIspInfo implements Serializable {
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getIspNum() {
return ispNum;
}
public void setIspNum(String ispNum) {
this.ispNum = ispNum;
}
}

View File

@@ -1,5 +1,6 @@
package com.nis.domain.log;
import com.google.gson.annotations.Expose;
import com.nis.util.excel.ExcelField;
public class NtcConnRecordLog extends BaseLogEntity<NtcConnRecordLog> {
@@ -29,8 +30,10 @@ public class NtcConnRecordLog extends BaseLogEntity<NtcConnRecordLog> {
protected String totalByte;
protected String ispCode;//运营商
protected String ispNum;//运营商 entrance_id+device_id
protected String ispName;//运营商
public String getIspCode() {
return ispCode;
@@ -120,4 +123,20 @@ public class NtcConnRecordLog extends BaseLogEntity<NtcConnRecordLog> {
this.s2cByteNum = s2cByteNum;
}
public String getIspName() {
return ispName;
}
public void setIspName(String ispName) {
this.ispName = ispName;
}
public String getIspNum() {
return ispNum;
}
public void setIspNum(String ispNum) {
this.ispNum = ispNum;
}
}

View File

@@ -31,7 +31,7 @@ public class PxyHttpLog extends BaseLogEntity<NtcIpLog> {
@ExcelField(title="req_body",sort=78)
private String reqBody;
@ExcelField(title="resp_body",sort=79)
private String resBody;
private String respBody;
@ExcelField(title="website",sort=8)
private String website;
@@ -115,23 +115,30 @@ public class PxyHttpLog extends BaseLogEntity<NtcIpLog> {
public void setReqBody(String reqBody) {
this.reqBody = reqBody;
}
public String getResBody() {
return resBody;
public String getRespBody() {
return respBody;
}
public void setResBody(String resBody) {
this.resBody = resBody;
public void setRespBody(String respBody) {
this.respBody = respBody;
}
@Override
public String toString() {
return "{\"url\"=\"" + url + "\", \"reqLine\"=\"" + reqLine
+ "\", \"resLine\"=\"" + resLine + "\", \"cookie\"=\"" + cookie
+ "\", \"referer\"=\"" + referer + "\", \"userAgent\"=\""
+ userAgent + "\", \"contentLen\"=\"" + contentLen
+ "\", \"contentType\"=\"" + contentType
+ "\", \"setCookie\"=\"" + setCookie + "\", \"reqHeader\"=\""
+ reqHeader + "\", \"respHeader\"=\"" + respHeader
+ "\", \"reqBody\"=\"" + reqBody + "\", \"resBody\"=\""
+ resBody + "\"}";
return "PxyHttpLog [url=" + url + ", reqLine=" + reqLine + ", resLine=" + resLine + ", cookie=" + cookie
+ ", referer=" + referer + ", userAgent=" + userAgent + ", contentLen=" + contentLen + ", contentType="
+ contentType + ", setCookie=" + setCookie + ", reqHeader=" + reqHeader + ", respHeader=" + respHeader
+ ", reqBody=" + reqBody + ", respBody=" + respBody + ", website=" + website + ", cfgId=" + cfgId
+ ", foundTime=" + foundTime + ", recvTime=" + recvTime + ", transProto=" + transProto + ", addrType="
+ addrType + ", dIp=" + dIp + ", sIp=" + sIp + ", dPort=" + dPort + ", sPort=" + sPort + ", service="
+ service + ", entranceId=" + entranceId + ", deviceId=" + deviceId + ", direction=" + direction
+ ", streamDir=" + streamDir + ", capIp=" + capIp + ", addrList=" + addrList + ", serverLocate="
+ serverLocate + ", clientLocate=" + clientLocate + ", sAsn=" + sAsn + ", dAsn=" + dAsn
+ ", sSubscribeId=" + sSubscribeId + ", dSubscribeId=" + dSubscribeId + ", sceneFile=" + sceneFile
+ ", functionId=" + functionId + ", action=" + action + ", date=" + date + ", seltype=" + seltype
+ ", searchFoundStartTime=" + searchFoundStartTime + ", searchFoundEndTime=" + searchFoundEndTime
+ ", isLogTotalSearch=" + isLogTotalSearch + ", orderBy=" + orderBy + ", encapType=" + encapType
+ ", linkId=" + linkId + ", innerSmac=" + innerSmac + ", innerDmac=" + innerDmac + ", id=" + id
+ ", currentUser=" + currentUser + ", page=" + page + ", pageLog=" + pageLog + ", sqlMap=" + sqlMap
+ ", isNewRecord=" + isNewRecord + ", isFilterAction=" + isFilterAction + "]";
}
}

View File

@@ -44,7 +44,7 @@ public class GroupReuseAddBean implements Serializable{
@Expose
private Integer opAction;
@Expose
@SerializedName("commonGroupList")
@SerializedName("groupReuseList")
private List<GroupReuseCfg> groupReuseCfgList;
public String getVersion() {

View File

@@ -14,7 +14,7 @@ import com.nis.domain.maat.MaatCfg.StringCfg;
*
*/
public class GroupReuseCfg implements Serializable {
/*@Expose
@Expose
@SerializedName("service")
private Integer serviceId;
public Integer getServiceId() {
@@ -23,7 +23,7 @@ public class GroupReuseCfg implements Serializable {
public void setServiceId(Integer serviceId) {
this.serviceId = serviceId;
}
*/ /**
/**
*
*/
private static final long serialVersionUID = 1830956100866313836L;

View File

@@ -95,8 +95,6 @@ public class MaatCfg implements Serializable {
@Expose
@SerializedName("ipClientRangeList")
private List<IpCfg> areaIpRegionList;
@Expose
private List<GroupCfg> keepGroupList;
public static class GroupCfg{
@Expose
@@ -106,8 +104,6 @@ public class MaatCfg implements Serializable {
@Expose
private Integer isValid;
@Expose
private Integer isCommonGroup;
@Expose
@SerializedName("opTime")
private Date auditTime;
public Integer getGroupId() {
@@ -134,12 +130,7 @@ public class MaatCfg implements Serializable {
public void setAuditTime(Date auditTime) {
this.auditTime = auditTime;
}
public Integer getIsCommonGroup() {
return isCommonGroup;
}
public void setIsCommonGroup(Integer isCommonGroup) {
this.isCommonGroup = isCommonGroup;
}
}
public static class StringCfg{
@Expose
@@ -688,13 +679,6 @@ public class MaatCfg implements Serializable {
public void setRequestId(Integer requestId) {
this.requestId = requestId;
}
public List<GroupCfg> getKeepGroupList() {
return keepGroupList;
}
public void setKeepGroupList(List<GroupCfg> keepGroupList) {
this.keepGroupList = keepGroupList;
}
public void initDefaultValue() {
this.doLog=Constants.MAAT_CFG_DOLOG_DEFAULT;
// this.doBlackList=Constants.MAAT_CFG_DOLOG_DOBLACKLIST_DEFAULT;

View File

@@ -54,6 +54,8 @@ public class ToUpdateMaatBeanStatus implements Serializable{
@Expose
private Integer isValid;
@Expose
private Integer service;
@Expose
@SerializedName("opTime")
private Date auditTime;
public Integer getCompileId() {
@@ -74,6 +76,12 @@ public class ToUpdateMaatBeanStatus implements Serializable{
public void setAuditTime(Date auditTime) {
this.auditTime = auditTime;
}
public Integer getService() {
return service;
}
public void setService(Integer service) {
this.service = service;
}
}
public String getVersion() {

View File

@@ -6,9 +6,7 @@ import com.nis.util.excel.ExcelField;
public class NtcAsnRecord extends BaseLogEntity<NtcAsnRecord>{
private static final long serialVersionUID = -4947912502754359817L;
@ExcelField(title="GBps",sort=10)
protected String GBps;
//@ExcelField(title="bps",sort=10)
@ExcelField(title="bps",sort=10)
protected String bps;
@ExcelField(title="pps",sort=9)
protected String pps;
@@ -27,13 +25,7 @@ public class NtcAsnRecord extends BaseLogEntity<NtcAsnRecord>{
this.searchAsnType = searchAsnType;
}
protected String searchAsnType;//1:d_asn;2:s_asn
public String getGBps() {
return bps;
}
public void setGBps(String gBps) {
GBps = this.getBps();
}
public String getBps() {
return bps;
}

View File

@@ -23,21 +23,6 @@ public class ConfigGroupInfo implements Serializable{
@ExcelField(title="cfg_id",sort=301)
private Integer compileId;
private Long asnId;
private Integer isAuditAll; //是否有策略选择了此公共组下发所有;
private Integer isUsed; //是否有策略选择了此公共组;
public Integer getIsUsed() {
return isUsed;
}
public void setIsUsed(Integer isUsed) {
this.isUsed = isUsed;
}
public Integer getIsAuditAll() {
return isAuditAll;
}
public void setIsAuditAll(Integer isAuditAll) {
this.isAuditAll = isAuditAll;
}
public Long getAsnId() {
return asnId;

View File

@@ -0,0 +1,93 @@
package com.nis.persistence.interceptor;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.log4j.Logger;
import com.nis.domain.ScheduleCfg;
import com.nis.domain.configuration.BaseCfg;
import com.nis.util.ServiceConfigTemplateUtil;
/**
* 定时任务 拦截器
* 1、拦截 select 操作
* 2、判断是否 form 查询配置主表
* 3、如果是配置主表查询对应的 scheduleCfg信息
* @author fang
*
*/
@Intercepts({@Signature(type = Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class ScheduleSelectInterceptor extends BaseInterceptor{
private static final long serialVersionUID = -265785145929843646L;
private static final Logger logger = Logger.getLogger(ScheduleSelectInterceptor.class);
@Override
@SuppressWarnings("all")
public Object intercept(Invocation invocation) throws Throwable {
final MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
final Executor executor = (Executor)invocation.getTarget();
// select sql 查询结果
Object result = invocation.proceed();
if(result != null ) {
if(result instanceof Collection) {
Collection c = (Collection)result;
// if(c.size()==1) {//如果只查询一个 配置可以判定为是 form update 页面查询
if(c.size() >0) {//配置列表需要查询是否为定时任务,所以需要遍历
Iterator iterator = c.iterator();
while(iterator.hasNext()){
Object next = iterator.next();
if(next instanceof BaseCfg<?>) {
BaseCfg cfg = (BaseCfg)next;
//结果集的类名
String simpleName = next.getClass().getSimpleName();
//根据类名查找对应的 表名
String tableName = ServiceConfigTemplateUtil.getCfgTableNameByClassName(simpleName);
if(tableName != null) {//是配置主表
Configuration configuration = mappedStatement.getConfiguration();
MappedStatement scheduleStmt = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.findScheduleList");
ScheduleCfg sc = new ScheduleCfg();
sc.setTableName(tableName);
sc.setCfgId(cfg.getCfgId());
sc.setCompileId(cfg.getCompileId());
//executor.clearLocalCache();
List<ScheduleCfg> schedules = executor.query(scheduleStmt, sc, RowBounds.DEFAULT, Executor.NO_RESULT_HANDLER);
if(schedules != null&& schedules.size() > 0) {
cfg.setSchedule(schedules.get(0));
}
logger.debug(String.format("配置bean中赋值scheduleCfg,表名:%s,类名:%s,cfgId:%s,compileId:%s,schedules num:%s", tableName,simpleName,sc.getCfgId(),sc.getCompileId(),schedules==null?0:schedules.size()));
}
}else{
break;
}
}
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}

View File

@@ -0,0 +1,391 @@
package com.nis.persistence.interceptor;
import java.lang.reflect.Array;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.apache.log4j.Logger;
import org.springframework.beans.BeanUtils;
import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.google.common.collect.Lists;
import com.nis.domain.ScheduleCfg;
import com.nis.domain.ScheduleExceInfo;
import com.nis.domain.configuration.BaseCfg;
import com.nis.util.ServiceConfigTemplateUtil;
import com.nis.web.security.UserUtils;
import jersey.repackaged.com.google.common.collect.Sets;
/**
* 定时任务 拦截器
* 1、拦截insert,update,delete操作
* 2、判断是否是需要下发配置的表
* 3、如果是需要下发配置的表则同时将数据保存到schedule_cfg表中并调用定时任务
* @author fang
*
*/
@Intercepts({@Signature(
type= Executor.class,
method = "update",
args = {MappedStatement.class,Object.class})})
public class ScheduleUpdateInterceptor extends BaseInterceptor{
private static final long serialVersionUID = -265785145929843646L;
private static final Logger logger = Logger.getLogger(ScheduleUpdateInterceptor.class);
private static final String TABLE_NAME_INSERT_REG = "^\\s*insert\\s+into\\s+([\\w_-]+)\\s*\\(";
private static final Pattern TABLE_NAME_INSERT_PATTERN = Pattern.compile(TABLE_NAME_INSERT_REG, Pattern.CASE_INSENSITIVE);//大小写
private static final String TABLE_NAME_UPDATE_REG = "^\\s*update\\s+([\\w_-]+)";
private static final Pattern TABLE_NAME_UPDATE_PATTERN = Pattern.compile(TABLE_NAME_UPDATE_REG, Pattern.CASE_INSENSITIVE);//大小写
private static final String TABLE_NAME_DELETE_REG = "^\\s*delete\\s+from\\s+([\\w_-]+)";
private static final Pattern TABLE_NAME_DELETE_PATTERN = Pattern.compile(TABLE_NAME_DELETE_REG, Pattern.CASE_INSENSITIVE);//大小写
/**
* 排除拦截的id
*/
private static final Set<String> EXCLUDE_MAPPER_IDS = Sets.newHashSet();
static {
EXCLUDE_MAPPER_IDS.add("com.nis.web.dao.SchedulerDao.updateCfgTableStatus");
EXCLUDE_MAPPER_IDS.add("com.nis.web.dao.basics.ServiceDictInfoDao");
EXCLUDE_MAPPER_IDS.add("com.nis.web.dao.configuration.PxyObjKeyringDao.updatePxyObjTrustedCaCrl");
EXCLUDE_MAPPER_IDS.add("com.nis.web.dao.configuration.CommonPolicyDao.auditCfgBatch");
}
/**
* is_valid 字段名
*/
private static final String IS_VALID_COLUMN = "is_valid";
/**
* is_audit 字段名
*/
private static final String IS_AUDIT_COLUMN = "is_audit";
@Override
@SuppressWarnings("all")
public Object intercept(Invocation invocation) throws Throwable {
final MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
final Executor executor = (Executor)invocation.getTarget();
Object parameter = invocation.getArgs()[1];//被拦截的 sql 参数
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
Object result = invocation.proceed();//被拦截的 sql 操作 继续执行
String curProceedId = mappedStatement.getId();
//不需要拦截的操作直接返回结果
if(EXCLUDE_MAPPER_IDS.contains(curProceedId)) {
return result;
}
String tableName = null;//操作的表名
//mybatis 整个mapper 信息
Configuration configuration = mappedStatement.getConfiguration();
//被拦截的 sql语句
String sql = boundSql.getSql();
//所有需要拦截的表名
Set<String> tableNames = ServiceConfigTemplateUtil.getCompileTableName();
switch (mappedStatement.getSqlCommandType()) {
case INSERT://新增配置
Matcher insertMatcher = TABLE_NAME_INSERT_PATTERN.matcher(sql);
tableName = insertMatcher.find()?insertMatcher.group(1):tableName;
if(tableName != null && tableNames.contains(tableName.toLowerCase())) {
insertCfg(executor,parameter, configuration,tableName);
}
break;
case UPDATE://更新配置
Matcher updateMatcher = TABLE_NAME_UPDATE_PATTERN.matcher(sql);
tableName = updateMatcher.find()?updateMatcher.group(1):tableName;
if(tableName != null && tableNames.contains(tableName.toLowerCase())) {
updateCfg(executor,boundSql, configuration,tableName);
}
break;
case DELETE://删除配置
Matcher deleteMatcher = TABLE_NAME_DELETE_PATTERN.matcher(sql);
tableName = deleteMatcher.find()?deleteMatcher.group(1):tableName;
if(tableName != null && tableNames.contains(tableName.toLowerCase())) {
deleteCfg(executor,parameter, configuration,tableName);
}
break;
default:
break;
}
logger.debug(sql);
return result;
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
/**
* @throws SQLException
*
*/
@SuppressWarnings("all")
private void insertCfg(Executor executor,Object parameterObject,Configuration configuration,String tableName) throws SQLException {
List<BaseCfg> cfgList = Lists.newArrayList();
//确保 单个,批量都适用
if(parameterObject instanceof BaseCfg<?>) {//单个添加
BaseCfg<?> baseCfg = (BaseCfg<?>)parameterObject;
cfgList.add(baseCfg);
}else if(parameterObject instanceof Collection) {
Collection<BaseCfg<?>> bcCollection = (Collection<BaseCfg<?>>)parameterObject;
cfgList.addAll(bcCollection);
}else if(parameterObject.getClass().isArray()) {
int length = Array.getLength(parameterObject);
for(int i = 0;i< length;i++) {
BaseCfg<?> baseCfg = (BaseCfg<?>)Array.get(parameterObject, i);
cfgList.add(baseCfg);
}
}
//整理需要 insert 的 schedule_cfg 的数据
List<ScheduleCfg> scheduleList = Lists.newArrayList();
for(BaseCfg<?> baseCfg : cfgList) {
baseCfg.setIsValid(0);//设置默认值
baseCfg.setIsAudit(0);//设置默认值
ScheduleCfg scList = copyScheduleCfgFromBaseCfg(baseCfg, tableName);
if(scList!=null){
scheduleList.add(scList);
}
}
if(scheduleList.size() > 0) {
for(ScheduleCfg sc : scheduleList) {
MappedStatement statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.insert");
executor.update(statement, sc);
}
}
}
/**
*
*/
@SuppressWarnings("all")
private void updateCfg(Executor executor,BoundSql boundSql,Configuration configuration,String tableName) throws SQLException {
/*
* 条件1 is_valid=0,is_audit=0; 未生效之前修改,来自修改页面
*1、首先将所有相关定时任务信息取消
*2、 新增 定时任务信息
*/
Object parameterObject = boundSql.getParameterObject();
if(parameterObject instanceof BaseCfg) {
BaseCfg bc = (BaseCfg)parameterObject;
Integer isValid = bc.getIsValid();
Integer isAudit = bc.getIsAudit();
Integer compileId = bc.getCompileId();
Long cfgId = bc.getCfgId();
if(isValid == 0 && isAudit == 0) {
ScheduleCfg sc = new ScheduleCfg();
sc.setCompileId(compileId);
sc.setEditorId(bc.getEditorId());
sc.setEditTime(bc.getEditTime());
sc.setCfgId(cfgId);
//根据 compileId 删除之前的
MappedStatement statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.deleteByCompileId");
executor.update(statement, sc);
//新增 更改的
ScheduleCfg schedule = copyScheduleCfgFromBaseCfg(bc, tableName);
if(schedule != null ) {
statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.insert");
executor.update(statement, schedule);
//配置信息新增,或取消之后重新修改,需要修改 exce_new表的状态
statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.updateScheduleExceNew");
ScheduleExceInfo exceNew = new ScheduleExceInfo();
exceNew.setCompileId(compileId);
exceNew.setIssueStatus(1);
exceNew.setIsIssue(1);//定时任务执行时需要下发配置
executor.update(statement, exceNew);
}
return;
}
}
//完整的sql语句已经完成 ? 替换
String sql = showSql(configuration, boundSql);
log.debug(String.format("cfg update sql : " , sql));
//其它剩余基本判定为 修改状态的 update
MySqlStatementParser parser = new MySqlStatementParser(sql);
MySqlUpdateStatement updateSqlStmt = (MySqlUpdateStatement)parser.parseStatement();
List<SQLUpdateSetItem> items = updateSqlStmt.getItems();
/* 分别获取 is_audit & is_valid 的值*/
Integer isValid = null;
Integer isAudit = null;
for(SQLUpdateSetItem item : items) {
if(IS_VALID_COLUMN.equalsIgnoreCase(item.getColumn().toString())) {
isValid = Integer.valueOf(item.getValue().toString());
continue;
}
if(IS_AUDIT_COLUMN.equalsIgnoreCase(item.getColumn().toString())) {
isAudit = Integer.valueOf(item.getValue().toString());
continue;
}
if(isValid != null && isAudit != null) {
break;
}
}
//isValid 和 isAudit 同时为空,目前发现有 取消来函的 update 操作有此情况
if(isValid == null && isAudit == null) {
return;
}
//获取当前的update 条件
String whereStr = updateSqlStmt.getWhere().toString();
StringBuilder whereSb = new StringBuilder();
whereSb.append(" and table_name = '");
whereSb.append(tableName);
whereSb.append("' and ( ");
whereSb.append(whereStr);
whereSb.append(" )");
//根据当前的 update 条件 查出所有符合条件的 schedule_cfg 数据
MappedStatement scheduleStmt = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.findScheduleList");
ScheduleCfg sc = new ScheduleCfg();
sc.setWhereStr(whereSb.toString());
List<ScheduleCfg> schedules = executor.query(scheduleStmt, sc, RowBounds.DEFAULT, Executor.NO_RESULT_HANDLER);
if(schedules != null && schedules.size() > 0) {//有符合条件的 定时任务
Set<Integer> compileSet = Sets.newHashSet();//保存操作的所有 compileId
Date now = new Date();//当前时间
//1、将符合条件的是 ScheduleCfg update del_flag = 0
for(ScheduleCfg scfg : schedules) {
compileSet.add(scfg.getCompileId());
scfg.setEditorId(UserUtils.getUser().getId());
scfg.setEditTime(now);
MappedStatement statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.deleteByCompileId");
executor.update(statement, scfg);
}
//2、把原信息 重新保存,并修改 is_valid ,is_audit 状态
for(ScheduleCfg scfg : schedules) {
MappedStatement statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.insert");
scfg.setIsValid(isValid);
scfg.setIsAudit(isAudit);
executor.update(statement, scfg);
}
//手动 审核通过,立即生效时 已经下发,修改 exce_new 表的是否需要下发字段为 不需要 0
if(isValid == 1 && isAudit == 1) {
for(Integer ci : compileSet) {
MappedStatement statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.findScheduleExceNew");
ScheduleExceInfo se = new ScheduleExceInfo();
se.setCompileId(ci);
se.setIsValid(isValid);
List<ScheduleExceInfo> seList = executor.query(statement, se, RowBounds.DEFAULT, Executor.NO_RESULT_HANDLER);
if(seList == null || seList.size() < 1) {//没有执行记录,新增一条
//配置信息新增,或取消之后重新修改,需要修改 exce_new表的状态
statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.insertScheduleExceNew");
ScheduleExceInfo exceNew = new ScheduleExceInfo();
exceNew.setCompileId(ci);
exceNew.setIssueStatus(1);
exceNew.setIsIssue(0);//已经下发,定时任务不需要下发
exceNew.setExceTime(new Date());
executor.update(statement, exceNew);
}else {
//配置信息新增,或取消之后重新修改,需要修改 exce_new表的状态
statement = configuration.getMappedStatement("com.nis.web.dao.SchedulerDao.updateScheduleExceNew");
ScheduleExceInfo exceNew = new ScheduleExceInfo();
exceNew.setCompileId(ci);
exceNew.setIssueStatus(1);
exceNew.setIsIssue(0);//已经下发,定时任务不需要下发
executor.update(statement, exceNew);
}
}
}
}
}
/**
* 暂时没有发现有 删除操作
*/
@SuppressWarnings("all")
private void deleteCfg(Executor executor,Object parameterObject,Configuration configuration,String tableName) throws SQLException {
}
/**
* 从 basecfg 实体类中获取 schedule cfg
* @param baseCfg
* @param tableName
* @return
*/
private ScheduleCfg copyScheduleCfgFromBaseCfg(BaseCfg<?> baseCfg,String tableName){
ScheduleCfg schedule = baseCfg.getSchedule();
if(schedule != null ) {
BeanUtils.copyProperties(baseCfg, schedule,new String[]{"userRegion1","userRegion2","userRegion3","userRegion4","userRegion5"});
schedule.setTableName(tableName);
}
return schedule;
}
/*如果参数是String则添加单引号 如果是日期,则转换为时间格式器并加单引号; 对参数是null和不是null的情况作了处理*/
private static String getParameterValue(Object obj) {
String value = null;
if (obj instanceof String) {
value = "'" + obj.toString() + "'";
} else if (obj instanceof Date) {
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault());
value = "'" + formatter.format(new Date()) + "'";
} else {
if (obj != null) {
value = obj.toString();
} else {
value = "null";
}
}
return value;
}
// 进行?的替换
public static String showSql(Configuration configuration, BoundSql boundSql) {
Object parameterObject = boundSql.getParameterObject(); // 获取参数
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
String sql = boundSql.getSql().replaceAll("[\\s]+", " "); // sql语句中多个空格都用一个空格代替
if (parameterMappings != null && parameterMappings.size() >0 && parameterObject != null) {
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry(); // 获取类型处理器注册器类型处理器的功能是进行java类型和数据库类型的转换<br>       // 如果根据parameterObject.getClass()可以找到对应的类型,则替换
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(parameterObject)));
} else {
MetaObject metaObject = configuration.newMetaObject(parameterObject);// MetaObject主要是封装了originalObject对象提供了get和set的方法用于获取和设置originalObject的属性值,主要支持对JavaBean、Collection、Map三种类型对象的操作
for (ParameterMapping parameterMapping : parameterMappings) {
String propertyName = parameterMapping.getProperty();
if (metaObject.hasGetter(propertyName)) {
Object obj = metaObject.getValue(propertyName);
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
} else if (boundSql.hasAdditionalParameter(propertyName)) {
Object obj = boundSql.getAdditionalParameter(propertyName); // 该分支是动态sql
sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
}else{sql=sql.replaceFirst("\\?","缺失");}//打印出缺失,提醒该参数缺失并防止错位
}
}
}
return sql;
}
@Override
public void setProperties(Properties properties) {
// TODO Auto-generated method stub
}
}

View File

@@ -0,0 +1,532 @@
package com.nis.quartz;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.quartz.CalendarIntervalScheduleBuilder;
import org.quartz.CalendarIntervalTrigger;
import org.quartz.CronScheduleBuilder;
import org.quartz.DateBuilder;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.PersistJobDataAfterExecution;
import org.quartz.ScheduleBuilder;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.matchers.GroupMatcher;
import org.quartz.impl.triggers.CalendarIntervalTriggerImpl;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.quartz.spi.MutableTrigger;
import com.nis.domain.ScheduleCfg;
import com.nis.util.Constants;
import com.nis.util.DateUtil;
import com.nis.util.DateUtils;
import com.nis.util.StringUtils;
import com.nis.web.dao.SchedulerDao;
import com.nis.web.service.SpringContextHolder;
/**
* 定时任务 配置定时任务加载
* 1、每 n s 执行一次,每次读取 schedule_cfg 最新的数据
* 2、删除或新增 定时任务
* 3、单线程执行
* @author fang
*
*/
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class ScheduleCfgJob implements Job {
private static final Logger log = Logger.getLogger(ScheduleCfgJob.class);
/**
* 状态组格式statusGroup-compileId
*/
private static final String STATUS_GROUP = "statusGroup-";
private static final String STATUS_JOB = "STATUS-JOB";
/**
* 生效标识valid-cronexp
*/
private static final String VALID_KEY = "valid-";
/**
* 失效标识invalid-cronexp
*/
private static final String INVALID_KEY = "invalid-";
private static final JobKey STATUS_JOBKEY = JobKey.jobKey(STATUS_JOB, "statusGroup");
private static final JobDetail STATUS_JOBDETAIL = JobBuilder.newJob(ScheduleStatusJob.class)
.withIdentity(STATUS_JOBKEY)
.storeDurably(true)
.build();
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Scheduler scheduler = context.getScheduler();
SchedulerDao dao = SpringContextHolder.getBean(SchedulerDao.class);
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
long scheduleCfgId = dataMap.get("scheduleCfgId") == null ? 0:dataMap.getLong("scheduleCfgId");
long limit = dataMap.get("limit") == null ? 1000:dataMap.getLong("limit");
log.info(String.format("定时配置任务开始执行scheduleCfgId:%s,limit:%s",scheduleCfgId,limit ));
List<ScheduleCfg> newlyCfg = null;
int totalNum = 0;
do {
newlyCfg = dao.findNewlyCfg(scheduleCfgId, limit);
if(newlyCfg != null && newlyCfg.size() > 0) {
totalNum += newlyCfg.size();
for(ScheduleCfg cfg : newlyCfg) {//先取消之前的定时配置
Integer compileId = cfg.getCompileId();
try {
//取消之前所有的 trigger
GroupMatcher<TriggerKey> groupMatcher= GroupMatcher.triggerGroupEquals(STATUS_GROUP + compileId);
Set<TriggerKey> triggerKeys = scheduler.getTriggerKeys(groupMatcher);
if(triggerKeys != null && triggerKeys.size() > 0) {
for(TriggerKey tk : triggerKeys) {
scheduler.unscheduleJob(tk);
}
log.info(String.format("定时任务取消成功compile:%s", compileId));
}
} catch (Exception e) {
log.error(String.format("定时任务取消异常compileId:%s", compileId),e);
}
}
for(ScheduleCfg cfg : newlyCfg) {
Integer compileId = cfg.getCompileId();
try {
//判断状态,重新添加最新的 trigger
Integer isValid = cfg.getIsValid();
Integer isAudit = cfg.getIsAudit();
//添加定时任务的条件
if((isValid == 1 && isAudit == 1) || (isValid == 0 && isAudit == 0)) {
//添加定时任务包括valid 和 invalid
addJob(scheduler, cfg);
log.info(String.format("定时任务添加成功compile:%s", compileId));
}
} catch (Exception e) {
log.error(String.format("定时任务更新异常compileId:%s", compileId),e);
}
}
//最后 保存此次 最后的id
ScheduleCfg lastCfg = newlyCfg.get(newlyCfg.size() -1);
scheduleCfgId = lastCfg.getId();
dataMap.put("scheduleCfgId", scheduleCfgId);
log.info(String.format("加载定时任务total num :%s", newlyCfg.size()));
}
} while (newlyCfg != null && newlyCfg.size() > 0);
log.info(String.format("定时配置任务结束执行total num:%s",totalNum));
}
/**
* 将定时任务信息添加到 定时器框架中调度
* @param scheduler
* @param cfg
* @throws SchedulerException
*/
/*public static void addJob(Scheduler scheduler,ScheduleCfg cfg) throws SchedulerException {
Integer compileId = cfg.getCompileId();
String cronValid = cfg.getCronValid();
String cronInvalid = cfg.getCronInvalid();
Trigger validTrigger = createTrigger(cronValid, compileId, true, cfg);
Trigger invalidTrigger = createTrigger(cronInvalid, compileId, false, cfg);
boolean jobExist = scheduler.checkExists(STATUS_JOBKEY);
if(!jobExist) {//判断 job 是否存在,不存在添加
scheduler.addJob(STATUS_JOBDETAIL, false);
}
boolean checkExists = scheduler.checkExists(validTrigger.getKey());
if(!checkExists) {//判断 valid trigger 是否存在,不存在添加
scheduler.scheduleJob(validTrigger);
}else {
log.warn(String.format("Trigger already exists:%s ", validTrigger.getKey().toString()));
}
checkExists = scheduler.checkExists(invalidTrigger.getKey());
if(!checkExists) {//判断 invalid trigger 是否存在,不存在添加
scheduler.scheduleJob(invalidTrigger);
}else {
log.warn(String.format("Trigger already exists:%s ", invalidTrigger.getKey().toString()));
}
}*/
public static void addJob(Scheduler scheduler,ScheduleCfg cfg) throws SchedulerException {
List<Trigger> triList = createTrigger(cfg);
boolean jobExist = scheduler.checkExists(STATUS_JOBKEY);
if(!jobExist) {//判断 job 是否存在,不存在添加
scheduler.addJob(STATUS_JOBDETAIL, false);
}
for(Trigger tri : triList) {
boolean checkExists = scheduler.checkExists(tri.getKey());
if(!checkExists) {//判断 valid trigger 是否存在,不存在添加
log.debug(String.format("定时任务添加,%s", tri.getKey()));
scheduler.scheduleJob(tri);
log.info(String.format("定时任务添加成功,%s", tri.getKey()));
}else {
log.warn(String.format("Trigger already exists:%s ", tri.getKey().toString()));
}
}
}
/**
* 将页面配置的内容 转换成 trigger
* @param cfg
* @return
*/
public static List<Trigger> createTrigger(ScheduleCfg cfg){
String mode = cfg.getUserRegion1().toUpperCase();//定时任务运行模式:一次,每天,每周,每月
List<Trigger> triList = null;
switch (mode) {
case "ALWAYS"://单次运行,但只创建单次生效触发器
triList = createSimpleTrigger(cfg);
break;
case "SINGLE"://单次运行
triList = createSimpleTrigger(cfg);
break;
case "EVERYDAY"://每天运行 0 0 0 2/1 * ? ,不符合要求,定义每天都执行,然后在 代码判断 间隔时间
triList = createCalendarIntervalTrigger(cfg);
break;
case "EVERYWEEK"://每周运行
triList = createCalendarIntervalTrigger(cfg);
break;
case "EVERYMONTH"://每月运行
triList = createEveryMonthTrigger(cfg);
break;
default:
log.warn(String.format("unknown mode : %s ", mode));
break;
}
return triList;
}
/**
* 将时间转换成 时分秒
* @param time
* @return
*/
public static List<Integer> parseTime(String time) {
if(StringUtils.isNoneBlank(time)) {
String[] split = time.split(":");
List<Integer> tl = new ArrayList<Integer>(3);
for(String s : split) {
tl.add(Integer.valueOf(s));
}
return tl;
}
return null;
}
public static Trigger createCronTrigger(String cron,Integer compileId,boolean isValid,ScheduleCfg cfg) {
String triggerName = isValid ? (VALID_KEY + cron) : (INVALID_KEY + cron);
JobDataMap dataMap = new JobDataMap();
dataMap.put("isValid", isValid);
dataMap.put("cfg", cfg);
return TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triggerName, STATUS_GROUP+compileId))
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.build();
}
/**
* 一次执行
* @param cfg
* @return
*/
public static List<Trigger> createSimpleTrigger(ScheduleCfg cfg){
List<Trigger> triList = new ArrayList<Trigger>();
Integer compileId = cfg.getCompileId();
String cronValid = cfg.getCronValid();
String cronInvalid = cfg.getCronInvalid();
Date validDate = null;
Date invalidDate = null;
if(StringUtils.isNotBlank(cronValid)){
validDate = DateUtil.convertStringToDate(cronValid, Constants.COMMON_DATE_FORMAT);
}
if(StringUtils.isNotBlank(cronInvalid)){
invalidDate = DateUtil.convertStringToDate(cronInvalid, Constants.COMMON_DATE_FORMAT);
}
JobDataMap dataMap = new JobDataMap();
if(validDate!=null){//生效时间如果不为空,则创建定时生效触发器
dataMap.put("isValid", true);
dataMap.put("cfg", cfg);
String triName = VALID_KEY + cfg.getUserRegion1() + "_" + cronValid;
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(validDate)
.build();
triList.add(trigger);
}
if(invalidDate!=null){//失效时间如果不为空,则创建定时失效触发器
dataMap = new JobDataMap();
dataMap.put("isValid", false);
dataMap.put("cfg", cfg);
String triName = INVALID_KEY + cfg.getUserRegion1() + "_" + cronInvalid;
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(invalidDate)
.build();
triList.add(trigger);
}
return triList;
}
/**
* 间隔 n 天 或 n 周执行
* @param cfg
* @return
*/
public static List<Trigger> createCalendarIntervalTrigger(ScheduleCfg cfg) {
List<Trigger> triList = new ArrayList<Trigger>();
Integer compileId = cfg.getCompileId();
String cronValid = cfg.getCronValid();
String cronInvalid = cfg.getCronInvalid();
String dayOrWeek = cfg.getUserRegion1();
Integer interval = Integer.valueOf(cfg.getUserRegion2());
List<Integer> validList = parseTime(cronValid);
List<Integer> invalidList = parseTime(cronInvalid);
Date validStartTime = DateBuilder.todayAt(validList.get(0), validList.get(1), validList.get(2));
Date invalidTime = DateBuilder.todayAt(invalidList.get(0), invalidList.get(1), invalidList.get(2));
CalendarIntervalScheduleBuilder intervalBuilder = null;
if("EVERYDAY".equalsIgnoreCase(dayOrWeek)) {
intervalBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInDays(interval);
//valid
JobDataMap dataMap = new JobDataMap();
dataMap.put("isValid", true);
dataMap.put("cfg", cfg);
String triName = VALID_KEY + dayOrWeek+"("+interval+")" + "_" + DateUtils.formatDate(validStartTime, Constants.COMMON_DATE_FORMAT);
Trigger validTri = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(intervalBuilder)
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(validStartTime)
.build();
triList.add(validTri);
//invalid
dataMap = new JobDataMap();
dataMap.put("isValid", false);
dataMap.put("cfg", cfg);
triName = INVALID_KEY + dayOrWeek +"("+interval+")" + "_" + DateUtils.formatDate(invalidTime, Constants.COMMON_DATE_FORMAT);
validTri = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(intervalBuilder)
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(invalidTime)
.build();
triList.add(validTri);
}else if("EVERYWEEK".equalsIgnoreCase(dayOrWeek)) {
intervalBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInWeeks(interval);
String[] weeks = cfg.getUserRegion3().split(",");
for(String week : weeks) {
if(StringUtils.isNoneBlank(week)) {
Date temp = closestAfterWeek(validStartTime, Integer.valueOf(week));
JobDataMap dataMap = new JobDataMap();
dataMap.put("isValid", true);
dataMap.put("cfg", cfg);
String triName = VALID_KEY + dayOrWeek +week+"("+interval+")" + "_" + DateUtils.formatDate(temp, Constants.COMMON_DATE_FORMAT);
Trigger validTri = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(intervalBuilder)
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(temp)
.build();
triList.add(validTri);
//invalid
dataMap = new JobDataMap();
dataMap.put("isValid", false);
dataMap.put("cfg", cfg);
temp = closestAfterWeek(invalidTime, Integer.valueOf(week));
triName = INVALID_KEY + dayOrWeek +week+"("+interval+")" + "_" + DateUtils.formatDate(temp, Constants.COMMON_DATE_FORMAT);
validTri = TriggerBuilder.newTrigger()
.withIdentity(createTiggerKey(triName, STATUS_GROUP+compileId))
.withSchedule(intervalBuilder)
.usingJobData(dataMap)
.forJob(STATUS_JOBDETAIL)
.startAt(temp)
.build();
triList.add(validTri);
}
}
}
return triList;
}
/**
* 每月 执行
* @param cfg
* @return
*/
public static List<Trigger> createEveryMonthTrigger(ScheduleCfg cfg){
String dayWeek = cfg.getUserRegion3();
String cronInvalid = cfg.getCronInvalid();
String cronValid = cfg.getCronValid();
StringBuilder cronSb = new StringBuilder();
Trigger trigger = null;
List<Integer> validList = parseTime(cronValid);//time 转换
List<Integer> invalidList = parseTime(cronInvalid);//time 转换
List<Trigger> triList = new ArrayList<Trigger>();
String userRegion4 = cfg.getUserRegion4().toUpperCase();
if("day".equalsIgnoreCase(dayWeek)) {//指定天
boolean hasL = userRegion4.contains("L");
StringBuilder chooseSb = new StringBuilder();
for(String str : userRegion4.split(",")) {
if(!"L".equalsIgnoreCase(str.trim())) {
chooseSb.append(",").append(str);
}
}
chooseSb.deleteCharAt(0);
cronSb.append(validList.get(2)).append(" ")//秒
.append(validList.get(1)).append(" ")//分
.append(validList.get(0)).append(" ")//小时
.append(chooseSb.toString()).append(" ")//日
.append(cfg.getUserRegion2()).append(" ")//月
.append("?").append(" ");//周
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), true, cfg);
triList.add(trigger);
cronSb.setLength(0);
cronSb.append(invalidList.get(2)).append(" ")//秒
.append(invalidList.get(1)).append(" ")//分
.append(invalidList.get(0)).append(" ")//小时
.append(chooseSb.toString()).append(" ")//日
.append(cfg.getUserRegion2()).append(" ")//月
.append("?").append(" ");//周
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), false, cfg);
triList.add(trigger);
if(hasL) {// 月的最后一天quartz 不支持 1,L 这种指定,所以 L单独处理一下
cronSb.setLength(0);
cronSb.append(validList.get(2)).append(" ")//秒
.append(validList.get(1)).append(" ")//分
.append(validList.get(0)).append(" ")//小时
.append("L").append(" ")//日
.append(cfg.getUserRegion2()).append(" ")//月
.append("?").append(" ");//周
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), true, cfg);
triList.add(trigger);
cronSb.setLength(0);
cronSb.append(invalidList.get(2)).append(" ")//秒
.append(invalidList.get(1)).append(" ")//分
.append(invalidList.get(0)).append(" ")//小时
.append("L").append(" ")//日
.append(cfg.getUserRegion2()).append(" ")//月
.append("?").append(" ");//周
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), false, cfg);
triList.add(trigger);
}
}else if ("week".equalsIgnoreCase(dayWeek)) {//指定周1#2: 第一周的周二4L:最后一周的周四
for(String nthWeek : userRegion4.split(",")) {//第几周
for(String week : cfg.getUserRegion5().split(",")) {//星期几
cronSb.setLength(0);
cronSb.append(validList.get(2)).append(" ")//秒
.append(validList.get(1)).append(" ")//分
.append(validList.get(0)).append(" ")//小时
.append("?").append(" ")//日
.append(cfg.getUserRegion2()).append(" ");//月
if("L".equalsIgnoreCase(nthWeek)) {
cronSb.append(week).append("L");//周
}else {
cronSb.append(week).append("#").append(nthWeek);//周
}
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), true, cfg);
triList.add(trigger);
cronSb.setLength(0);
cronSb.append(invalidList.get(2)).append(" ")//秒
.append(invalidList.get(1)).append(" ")//分
.append(invalidList.get(0)).append(" ")//小时
.append("?").append(" ")//日
.append(cfg.getUserRegion2()).append(" ");//月
if("L".equalsIgnoreCase(nthWeek)) {
cronSb.append(week).append("L");//周
}else {
cronSb.append(week).append("#").append(nthWeek);//周
}
trigger = createCronTrigger(cronSb.toString(), cfg.getCompileId(), false, cfg);
triList.add(trigger);
}
}
}
return triList;
}
/**
* 查找最近的 星期几 ,包括今天
* @param date
* @param w 周一开始 1 -7
* @return
*/
public static Date closestAfterWeek(Date date,int w) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int i = cal.get(Calendar.DAY_OF_WEEK);//周日开始 1-7
i = (i==1)? 7: i-1;//转换为 周一到 周日 1-7
cal.add(Calendar.DAY_OF_MONTH, (i>w)?(7-(i-w)) : (w-i));
return cal.getTime();
}
public static TriggerKey createTiggerKey(String name,String group) {
TriggerKey key = new TriggerKey(name, group);
return key;
}
/**
* jquery cron 生成的cron 表达式quartz 不能直接使用,需要做些修改
* @param cron
* @return
*/
public static String modifyCronExp(String cron) {
String[] cronArr = cron.split("\\s");
if("*".equals(cronArr[4])) {
cronArr[4] = "?";
}else {
cronArr[3] = "*";
cronArr[2] = "?";
}
return "0 " + StringUtils.join(cronArr, " ");
}
public static void main(String[] args) {
CronTriggerImpl cron = new CronTriggerImpl();
try {
String exp = "0 0 0 ? 1,2 1#4";
cron.setCronExpression(exp);
System.out.println(cron);
} catch (ParseException e) {
e.printStackTrace();
}
}
}

View File

@@ -0,0 +1,38 @@
package com.nis.quartz;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.nis.domain.ScheduleCfg;
import com.nis.web.service.ScheduleService;
import com.nis.web.service.SpringContextHolder;
/**
* 定时任务 真正执行类
* 配置状态下发
* 从trigger 的 jobDataMap 中取出 相关数据compile,isValid
* @author fang
*
*/
public class ScheduleStatusJob implements Job{
private static final Logger log = Logger.getLogger(ScheduleStatusJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
//从trigger中 获取 配置信息
JobDataMap jobDataMap = context.getTrigger().getJobDataMap();
boolean isValid = jobDataMap.getBoolean("isValid");
ScheduleCfg cfg = (ScheduleCfg)jobDataMap.get("cfg");
Integer compileId = cfg.getCompileId();
log.debug(String.format("任务开始执行compileId:%s,isValid:%s",compileId,isValid ));
//配置下发,并修改 配置表的状态,保存下发记录等
ScheduleService scheduleService = SpringContextHolder.getBean(ScheduleService.class);
scheduleService.issueCompileInfo(cfg, isValid?1:0);
log.debug(String.format("任务开始执行compileId:%s,isValid:%s",compileId,isValid ));
}
}

View File

@@ -194,6 +194,15 @@ public class CodeDicUtils {
}
return result;
}
/**
* 用于显示日志isp运营商的信息
* @param name
* @return
*/
public static List<SysIspInfo> getIspListByIspNum(){
List<SysIspInfo> result = codeSysIspInfoDicDao.getIspListByIspNum();;
return result;
}
public static void main(String[] args) {
getCodeList(APP_CODE);
}

View File

@@ -0,0 +1,690 @@
package com.nis.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import com.google.common.collect.Lists;
import com.googlecode.ipv6.IPv6Address;
import com.googlecode.ipv6.IPv6Network;
import com.nis.domain.basics.AsnIpCfg;
import com.nis.domain.configuration.AppIpCfg;
import com.nis.domain.configuration.BaseCfg;
import com.nis.domain.configuration.BaseIpCfg;
import com.nis.domain.configuration.BaseStringCfg;
import com.nis.domain.configuration.ComplexkeywordCfg;
import com.nis.domain.configuration.FileDigestCfg;
import com.nis.domain.configuration.IpPortCfg;
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;
public class ConfigConvertUtil {
private static Logger logger = LoggerFactory.getLogger(ConfigConvertUtil.class);
/**
* 配置域转换
* @param ipList
* @param strList
* @param complexStrList
* @param numList
* @param fileList
* @param regionIds
* @param groupIds
* @param entity
* @param compileId
* @param auditTime
* @param groupRelationList
* @param ipRegionList
* @param strRegionList
* @param numRegionList
* @param digestRegionList
* @param areaIpRegionList
* @param userRegion
*/
public static String configCovert(List<IpPortCfg> ipList,List<BaseStringCfg> strList,List<ComplexkeywordCfg> complexStrList,
List<com.nis.domain.configuration.NumBoundaryCfg > numList,
List<FileDigestCfg> fileList,List<Integer> regionIds,List<Integer> groupIds,BaseCfg entity,
Integer compileId,Date auditTime,List<GroupCfg> groupRelationList,
List<IpCfg> ipRegionList,
List<StringCfg> strRegionList,
List<NumBoundaryCfg> numRegionList,
List<DigestCfg> digestRegionList,
List<IpCfg> areaIpRegionList,String userRegion){
List list1 = new ArrayList();
List<BaseStringCfg> list2 = new ArrayList();
List<ComplexkeywordCfg> list3 = new ArrayList();
List<com.nis.domain.configuration.NumBoundaryCfg> list4 = new ArrayList();
List<FileDigestCfg> list5 = new ArrayList();
if(ipList.size()>0){
for(int index=0;index<ipList.size();index++){
IpPortCfg ip = ipList.get(index);
if(ip.getCompileId().equals(compileId)){
ip.setRegionId(regionIds.get(0));
regionIds.remove(0);
ip.setGroupId(groupIds.get(0));
groupIds.remove(0);
ip.setIsValid(entity.getIsValid());
ip.setAuditTime(auditTime);
list1.add(ip);
}
}
}
for(int index=0;index<strList.size();index++){
BaseStringCfg str = strList.get(index);
if(str.getCompileId().equals(compileId)){
str.setRegionId(regionIds.get(0));
regionIds.remove(0);
str.setGroupId(groupIds.get(0));
groupIds.remove(0);
str.setIsValid(entity.getIsValid());
str.setAuditTime(auditTime);
list2.add(str);
if(entity.getServiceId().equals(513)||entity.getServiceId().equals(515)){
if(userRegion.equals("")){
userRegion += Constants.USERREGION_DOMAIN_STR+"="+str.getCfgKeywords();
}else{
userRegion += Constants.USER_REGION_SPLIT+Constants.USERREGION_DOMAIN_STR+"="+str.getCfgKeywords();
}
}
}
}
for(int index=0;index<complexStrList.size();index++){
ComplexkeywordCfg str = complexStrList.get(index);
if(str.getCompileId().equals(compileId)){
str.setRegionId(regionIds.get(0));
regionIds.remove(0);
str.setGroupId(groupIds.get(0));
groupIds.remove(0);
str.setIsValid(entity.getIsValid());
str.setAuditTime(auditTime);
list3.add(str);
if(entity.getServiceId().equals(129) && str.getDistrict()!=null){//http监测
String dictValue = DictUtils.getDictCode(Constants.HTTP_HEADER_DICT_MODULE, str.getDistrict());
if(StringUtil.isEmpty(dictValue) || dictValue.equals("默认")){
if(userRegion.equals("")){
userRegion += Constants.HTTP_HEADER_USER_REGION_KEY+"="+str.getDistrict();
}else{
userRegion += Constants.USER_REGION_SPLIT+Constants.HTTP_HEADER_USER_REGION_KEY+"="+str.getDistrict();
}
}
}
}
}
for(int index=0;index<numList.size();index++){
com.nis.domain.configuration.NumBoundaryCfg num = numList.get(index);
if(num.getCompileId().equals(compileId)){
num.setRegionId(regionIds.get(0));
regionIds.remove(0);
num.setGroupId(groupIds.get(0));
groupIds.remove(0);
num.setIsValid(entity.getIsValid());
num.setAuditTime(auditTime);
list4.add(num);
}
}
for(int index=0;index<fileList.size();index++){
FileDigestCfg file = fileList.get(index);
if(file.getCompileId().equals(compileId)){
file.setRegionId(regionIds.get(0));
regionIds.remove(0);
file.setGroupId(groupIds.get(0));
groupIds.remove(0);
file.setIsValid(entity.getIsValid());
file.setAuditTime(auditTime);
list5.add(file);
}
}
if(list1.size()>0){
ipList.removeAll(list1);
Map<String,List> map = cfgToMaatConvert(ipRegionList,list1,1,groupRelationList);
groupRelationList=map.get("groupList");
ipRegionList=map.get("dstList");
if(map.get("numRegionList")!=null){
numRegionList.addAll(map.get("numRegionList"));
}
}
if(list2.size()>0){
strList.removeAll(list2);
Map<String,List> map = cfgToMaatConvert(strRegionList,list2,2,groupRelationList);
groupRelationList=map.get("groupList");
strRegionList=map.get("dstList");
}
if(list3.size()>0){
complexStrList.removeAll(list3);
Map<String,List> map = cfgToMaatConvert(strRegionList,list3,3,groupRelationList);
groupRelationList=map.get("groupList");
strRegionList=map.get("dstList");
}
if(list4.size()>0){
numList.removeAll(list4);
Map<String,List> map = cfgToMaatConvert(numRegionList,list4,4,groupRelationList);
groupRelationList=map.get("groupList");
numRegionList=map.get("dstList");
}
if(list5.size()>0){
fileList.removeAll(list5);
Map<String,List> map = cfgToMaatConvert(digestRegionList,list5,5,groupRelationList);
groupRelationList=map.get("groupList");
digestRegionList=map.get("dstList");
}
return userRegion;
}
// asn IP 复用转换
public static List<IpCfg> groupReuseCfgAddRemoveConvert(List<? extends BaseCfg<?>> ipCfgList, Integer isValid,
Integer groupId) {
logger.warn("convert data start");
long start = System.currentTimeMillis();
Date opTime = new Date();
List<IpCfg> maatIpList = new ArrayList<>();
if (ipCfgList.size() > 0) {
// 只用一次instanceof,取代循环中每次都用一次instanceof
if (ipCfgList.get(0) instanceof AsnIpCfg) {
for (BaseCfg<?> _cfg : ipCfgList) {
IpCfg cfg = new IpCfg();
BaseIpCfg baseIpCfg = new BaseIpCfg();
AsnIpCfg asnIpCfg = (AsnIpCfg) _cfg;
BeanUtils.copyProperties(asnIpCfg, baseIpCfg);
BeanUtils.copyProperties(baseIpCfg, cfg);
cfg.setGroupId(asnIpCfg.getAsnIpGroup());
cfg.setRegionId(asnIpCfg.getRegionId());
String userRegion = "ASN_ID=AS" + asnIpCfg.getUserRegion1();
cfg.setUserRegion(userRegion);
cfg.setIsValid(isValid);
cfg.setAuditTime(opTime);
List<IpCfg> cfgs = ipConvert(cfg, baseIpCfg);
maatIpList.addAll(cfgs);
}
} else if (ipCfgList.get(0) instanceof AppIpCfg) {
for (BaseCfg<?> _cfg : ipCfgList) {
IpCfg cfg = new IpCfg();
BaseIpCfg baseIpCfg = new BaseIpCfg();
AppIpCfg appIpCfg = (AppIpCfg) _cfg;
BeanUtils.copyProperties(appIpCfg, baseIpCfg);
BeanUtils.copyProperties(baseIpCfg, cfg);
cfg.setGroupId(groupId);
cfg.setRegionId(Integer.parseInt(appIpCfg.getUserRegion1()));
String userRegion = "APP_ID=" + appIpCfg.getAppCode();
cfg.setUserRegion(userRegion);
cfg.setIsValid(isValid);
cfg.setAuditTime(opTime);
List<IpCfg> cfgs = ipConvert(cfg, baseIpCfg);
maatIpList.addAll(cfgs);
}
}
}
long end = System.currentTimeMillis();
logger.warn("convert data finish,cost:" + (end - start));
return maatIpList;
}
/**
* 界面配置list转换为服务接口端的list用于批量下发时regionId,groupId已在该方法前被批量获取
*
* @param <T>
* @param <T>
* @param dstList
* @param srcList
* @param cfgType1为IP类型2为字符串类型3为增强字符串4数值类型5摘要类,6回调类[但字符串类域配置和增强字符串域配置在接口参数中同属于strRegionList]
* @param baseCfg配置基本信息
* @param groupRelationList
* 配置分组列表
* @return
*/
public static <T> Map<String, List> cfgToMaatConvert(List dstList, List<T> srcList, Integer cfgType,List groupRelationList) {
Map<String, List> map = new HashMap();
if (cfgType == 1) {
List numRegionList = new ArrayList();
Integer groupId = 0;
Integer numGroupId = 0;
for (int i = 0; i < srcList.size(); i++) {
List<Integer> regionIdList = Lists.newArrayList();
T srcCfg = srcList.get(i);
BaseIpCfg baseIpCfg = new BaseIpCfg();
BeanUtils.copyProperties(srcCfg, baseIpCfg);
regionIdList.add(baseIpCfg.getRegionId());
IpCfg cfg = new IpCfg();
BeanUtils.copyProperties(baseIpCfg, cfg);
//多条IP配置属于同一个分组
if (groupId == 0) {
GroupCfg group = new GroupCfg();
groupId = baseIpCfg.getGroupId();
group.setGroupId(groupId);
group.setCompileId(baseIpCfg.getCompileId());
group.setAuditTime(baseIpCfg.getAuditTime());
group.setIsValid(baseIpCfg.getIsValid());
groupRelationList.add(group);
}
cfg.setGroupId(groupId);
cfg.setAuditTime(baseIpCfg.getAuditTime());
cfg.setIsValid(baseIpCfg.getIsValid());
List<IpCfg> cfgs = ipConvert(cfg, baseIpCfg);
if (cfgs.size() > 1) {
List<Integer> ids = ConfigServiceUtil.getId(3, cfgs.size() - 1);
regionIdList.addAll(ids);
}
for (int j = i; j < cfgs.size() + i; j++) {
cfgs.get(j - i).setRegionId(regionIdList.get(j));
}
dstList.addAll(cfgs);
// 如果protocolId非空非零需要构造数值型域配置多条相同协议的IP只需要一条数值域配置目前没有不同协议IP&情况)
if (baseIpCfg.getProtocolId() != null && baseIpCfg.getProtocolId() != 0) {
if (numGroupId == 0) {
GroupCfg group1 = new GroupCfg();
group1.setGroupId(ConfigServiceUtil.getId(2, 1).get(0));
group1.setCompileId(baseIpCfg.getCompileId());
group1.setAuditTime(baseIpCfg.getAuditTime());
group1.setIsValid(baseIpCfg.getIsValid());
groupRelationList.add(group1);
NumBoundaryCfg numCfg = new NumBoundaryCfg();
numCfg.initDefaultValue();
numCfg.setLowBoundary(baseIpCfg.getProtocolId());
numCfg.setUpBoundary(baseIpCfg.getProtocolId());
numCfg.setRegionId(ConfigServiceUtil.getId(3, 1).get(0));
numCfg.setAuditTime(baseIpCfg.getAuditTime());
numCfg.setGroupId(group1.getGroupId());
numCfg.setIsValid(baseIpCfg.getIsValid());
numRegionList.add(numCfg);
map.put("numRegionList", numRegionList);
numGroupId++;
}
}
}
} else if (cfgType == 2 || cfgType == 3) {
for (int i = 0; i < srcList.size(); i++) {
// 一条业务配置创建一个分组
BaseCfg baseCfg = new BaseCfg();
BeanUtils.copyProperties(srcList.get(i), baseCfg,new String[]{"menuNameCode"});//拷贝公共属性
GroupCfg group = new GroupCfg();
StringCfg cfg = new StringCfg();
BeanUtils.copyProperties(srcList.get(i), cfg,new String[]{"menuNameCode"});//拷贝公共属性以及私有属性
group.setGroupId(baseCfg.getGroupId());
group.setCompileId(baseCfg.getCompileId());
group.setAuditTime(baseCfg.getAuditTime());
group.setIsValid(baseCfg.getIsValid());
groupRelationList.add(group);
cfg.setGroupId(group.getGroupId());
cfg.setRegionId(baseCfg.getRegionId());
cfg.setAuditTime(baseCfg.getAuditTime());
cfg.setIsValid(baseCfg.getIsValid());
// 处理配置关键字转译
cfg.setCfgKeywords(keywordsEscape(cfg.getCfgKeywords()));
// 增强字符串转换
cfg.setDistrict(keywordsEscape(cfg.getDistrict()));
dstList.add(cfg);
}
} else if (cfgType == 4) {
for (int i = 0; i < srcList.size(); i++) {
BaseCfg baseCfg = new BaseCfg();
BeanUtils.copyProperties(srcList.get(i), baseCfg);//拷贝公共属性
// 一条业务配置创建一个分组
com.nis.domain.maat.MaatCfg.NumBoundaryCfg cfg = new com.nis.domain.maat.MaatCfg.NumBoundaryCfg();
BeanUtils.copyProperties(srcList.get(i), cfg);
GroupCfg group = new GroupCfg();
group.setGroupId(baseCfg.getGroupId());
group.setCompileId(baseCfg.getCompileId());
group.setAuditTime(baseCfg.getAuditTime());
group.setIsValid(baseCfg.getIsValid());
groupRelationList.add(group);
cfg.setGroupId(group.getGroupId());
cfg.setRegionId(baseCfg.getRegionId());
cfg.setAuditTime(baseCfg.getAuditTime());
cfg.setIsValid(baseCfg.getIsValid());
dstList.add(cfg);
}
} else if (cfgType == 5) {
for (int i = 0; i < srcList.size(); i++) {
BaseCfg baseCfg = new BaseCfg();
BeanUtils.copyProperties(srcList.get(i), baseCfg);//拷贝公共属性
// 一条业务配置创建一个分组
com.nis.domain.maat.MaatCfg.DigestCfg cfg = new com.nis.domain.maat.MaatCfg.DigestCfg();
BeanUtils.copyProperties(srcList.get(i), cfg);
GroupCfg group = new GroupCfg();
group.setGroupId(baseCfg.getGroupId());
group.setCompileId(baseCfg.getCompileId());
group.setAuditTime(baseCfg.getAuditTime());
group.setIsValid(baseCfg.getIsValid());
groupRelationList.add(group);
cfg.setGroupId(group.getGroupId());
cfg.setRegionId(baseCfg.getRegionId());
cfg.setAuditTime(baseCfg.getAuditTime());
cfg.setIsValid(baseCfg.getIsValid());
dstList.add(cfg);
}
} else {
dstList.addAll(srcList);
}
map.put("groupList", groupRelationList);
map.put("dstList", dstList);
return map;
}
/**
* 关键字特殊字符转义处理
* @param cfgKeywords
* @return
*/
public static String keywordsEscape(String cfgKeywords) {
if (StringUtils.isNotEmpty(cfgKeywords)) {
// 不转译特殊字符
cfgKeywords = cfgKeywords.trim();// 首先去掉首尾空格
cfgKeywords = StringEscapeUtils.unescapeHtml4(cfgKeywords);
cfgKeywords = cfgKeywords.replace("\\", "\\\\");
cfgKeywords = cfgKeywords.replace("&", "\\&");
cfgKeywords = cfgKeywords.replace(" ", "\\b");
// ***and***在界面表示多个关键字的与表达式此特殊字符串在common.js中使用定义maat端以&表示
cfgKeywords = cfgKeywords.replace(Constants.KEYWORD_EXPR, "&");
}
return cfgKeywords;
}
/**
* 界面IP配置转换为MAAT类或者回调类IP配置
*
* @param dstIp
* @param srcIp
* @return
*/
public static List<IpCfg> ipConvert(IpCfg dstIp, BaseIpCfg srcIp) {
List<IpCfg> ipConvertList = Lists.newArrayList();
boolean isRange = ((srcIp.getIpPattern() != null && srcIp.getIpPattern() == 2)
|| (srcIp.getSrcIpAddress() != null && srcIp.getSrcIpAddress().indexOf("-") > -1)
|| (srcIp.getDestIpAddress() != null && srcIp.getDestIpAddress().indexOf("-") > -1));
if (isRange) {
List<IpCfg> tempList = Lists.newArrayList();
List<IpCfg> tempList1 = Lists.newArrayList();
if (srcIp.getIpType().intValue() == 4) {
if (srcIp.getSrcIpAddress() != null) {
String startIpPart = srcIp.getSrcIpAddress().split("-")[0];
String endIpPart = srcIp.getSrcIpAddress().split("-")[1];
Integer startNum = Integer.parseInt(startIpPart.split("\\.")[3]);
Integer endNum = Integer.parseInt(endIpPart.split("\\.")[3]);
for (int i = startNum; i <= endNum; i++) {
IpCfg tempIp = new IpCfg();
BeanUtils.copyProperties(dstIp, tempIp);
tempIp.setSrcIp(startIpPart.substring(0, startIpPart.lastIndexOf(".") + 1) + i);
tempIp.setSrcIpMask("255.255.255.255");
tempList.add(tempIp);
}
} else {
dstIp.setSrcIp("0.0.0.0");
dstIp.setSrcIpMask("255.255.255.255");
tempList.add(dstIp);
}
if (srcIp.getDestIpAddress() != null) {
String startIpPart = srcIp.getDestIpAddress().split("-")[0];
String endIpPart = srcIp.getDestIpAddress().split("-")[1];
Integer startNum = Integer.parseInt(startIpPart.split("\\.")[3]);
Integer endNum = Integer.parseInt(endIpPart.split("\\.")[3]);
for (IpCfg _cfg : tempList) {
for (int i = startNum; i <= endNum; i++) {
IpCfg tempIp = new IpCfg();
BeanUtils.copyProperties(_cfg, tempIp);
tempIp.setDstIp(startIpPart.substring(0, startIpPart.lastIndexOf(".") + 1) + i);
tempIp.setDstIpMask("255.255.255.255");
// 处理
convertPortValues(tempIp, srcIp);
if (!tempIp.getSrcIp().equals(tempIp.getDstIp())) {
tempList1.add(tempIp);
}
}
}
tempList.clear();
} else {
for (IpCfg _cfg : tempList) {
_cfg.setDstIp("0.0.0.0");
_cfg.setSrcIpMask("255.255.255.255");
convertPortValues(_cfg, srcIp);
}
}
if (tempList1.size() > 0) {
ipConvertList.addAll(tempList1);
} else {
ipConvertList.addAll(tempList);
}
} else if (srcIp.getIpType().intValue() == 6) {
if (srcIp.getSrcIpAddress() != null) {
IPv6Address address1 = IPv6Address.fromString(srcIp.getSrcIpAddress().split("-")[0]);
IPv6Address address2 = IPv6Address.fromString(srcIp.getSrcIpAddress().split("-")[1]);
IPv6Network network = IPv6Network.fromTwoAddresses(address1, address2);
dstIp.setSrcIp(address1.toString());
dstIp.setSrcIpMask(network.getNetmask().asAddress().toString());
} else {
dstIp.setSrcIp("::");
dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
}
if (srcIp.getDestIpAddress() != null) {
IPv6Address address1 = IPv6Address.fromString(srcIp.getDestIpAddress().split("-")[0]);
IPv6Address address2 = IPv6Address.fromString(srcIp.getDestIpAddress().split("-")[1]);
IPv6Network network = IPv6Network.fromTwoAddresses(address1, address2);
dstIp.setDstIp(address1.toString());
dstIp.setDstIpMask(network.getNetmask().asAddress().toString());
} else {
dstIp.setDstIp("::");
dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
}
ipConvertList.add(dstIp);
} else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
} else {
if (srcIp.getSrcIpAddress() != null) {
if (srcIp.getSrcIpAddress().indexOf("/") != -1) {
if (srcIp.getIpType() == 4 /* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
Integer srcMaskNum = Integer.parseInt(srcIp.getSrcIpAddress().split("/")[1]);
if (srcMaskNum == 0) {
dstIp.setSrcIpMask("0.0.0.0");
} else {
dstIp.setSrcIpMask(IpUtil.convertMask(srcMaskNum));
}
dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]);
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getSrcIpAddress());
dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]);
dstIp.setSrcIpMask(strangeNetwork.getNetmask().asAddress().toString());
} /*
* else { Pattern
* patternV4Subnet=Pattern.compile(Constants.IPV4_IP_SUBNET_REGEXP); Pattern
* patternV6Subnet=Pattern.compile(Constants.IPV6_IP_SUBNET_REGEXP); Matcher
* matchernV4Subnet=patternV4Subnet.matcher(srcIp.getSrcIpAddress()); Matcher
* matcherV6Subnet=patternV6Subnet.matcher(srcIp.getSrcIpAddress());
* if(matchernV4Subnet.matches()) { Integer srcMaskNum =
* Integer.parseInt(srcIp.getSrcIpAddress().split("/")[1]); if(srcMaskNum==0){
* dstIp.setSrcIpMask("0.0.0.0"); }else{
* dstIp.setSrcIpMask(IpUtil.convertMask(srcMaskNum)); }
* dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); }else
* if(matcherV6Subnet.matches()){ IPv6Network strangeNetwork =
* IPv6Network.fromString(srcIp.getSrcIpAddress());
* dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]);
* dstIp.setSrcIpMask(strangeNetwork.getNetmask().asAddress().toString()); }else
* { throw new RuntimeException("Invalid IP/subnet mask format"); } }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
} else {
if (srcIp.getIpType() == 4/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
dstIp.setSrcIp(srcIp.getSrcIpAddress());
dstIp.setSrcIpMask("255.255.255.255");
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
dstIp.setSrcIp(srcIp.getSrcIpAddress());
dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
} /*
* else {//all Pattern patternV4=Pattern.compile(Constants.IPV4_IP_REGEXP);
* Pattern patternV6=Pattern.compile(Constants.IPV6_IP_REGEXP); Matcher
* matcherV4=patternV4.matcher(srcIp.getSrcIpAddress()); Matcher
* matcherV6=patternV6.matcher(srcIp.getSrcIpAddress()); if(matcherV4.matches())
* { dstIp.setSrcIp(srcIp.getSrcIpAddress());
* dstIp.setSrcIpMask("255.255.255.255"); }else if(matcherV6.matches()) {
* dstIp.setSrcIp(srcIp.getSrcIpAddress());
* dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); }else { throw
* new RuntimeException("Invalid IP format"); } }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
}
} else {
if (srcIp.getIpType() == 4/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
dstIp.setSrcIp(srcIp.getSrcIpAddress());
dstIp.setSrcIpMask("255.255.255.255");
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
dstIp.setSrcIp(srcIp.getSrcIpAddress());
dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
} /*
* else {//all dstIp.setSrcIp(srcIp.getSrcIpAddress());
* dstIp.setSrcIpMask("255.255.255.255"); }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
}
if (srcIp.getDestIpAddress() != null) {
if (srcIp.getDestIpAddress().indexOf("/") != -1) {
if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
Integer dstMaskNum = Integer.parseInt(srcIp.getDestIpAddress().split("/")[1]);
if (dstMaskNum == 0) {
dstIp.setDstIpMask("0.0.0.0");
} else {
dstIp.setDstIpMask(IpUtil.convertMask(dstMaskNum));
;
}
dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]);
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getDestIpAddress());
dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]);
dstIp.setDstIpMask(strangeNetwork.getNetmask().asAddress().toString());
} /*
* else { Pattern
* patternV4Subnet=Pattern.compile(Constants.IPV4_IP_SUBNET_REGEXP); Pattern
* patternV6Subnet=Pattern.compile(Constants.IPV6_IP_SUBNET_REGEXP); Matcher
* matchernV4Subnet=patternV4Subnet.matcher(srcIp.getDestIpAddress()); Matcher
* matcherV6Subnet=patternV6Subnet.matcher(srcIp.getDestIpAddress());
* if(matchernV4Subnet.matches()) { Integer dstMaskNum =
* Integer.parseInt(srcIp.getDestIpAddress().split("/")[1]); if(dstMaskNum==0){
* dstIp.setDstIpMask("0.0.0.0"); }else{
* dstIp.setDstIpMask(IpUtil.convertMask(dstMaskNum));; }
* dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); }else
* if(matcherV6Subnet.matches()){ IPv6Network strangeNetwork =
* IPv6Network.fromString(srcIp.getDestIpAddress());
* dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]);
* dstIp.setDstIpMask(strangeNetwork.getNetmask().asAddress().toString()); }else
* { throw new RuntimeException("Invalid IP/subnet mask format"); } }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
} else {
if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
dstIp.setDstIp(srcIp.getDestIpAddress());
dstIp.setDstIpMask("255.255.255.255");
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
dstIp.setDstIp(srcIp.getDestIpAddress());
dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
} /*
* else {//all Pattern patternV4=Pattern.compile(Constants.IPV4_IP_REGEXP);
* Pattern patternV6=Pattern.compile(Constants.IPV6_IP_REGEXP); Matcher
* matcherV4=patternV4.matcher(srcIp.getDestIpAddress()); Matcher
* matcherV6=patternV6.matcher(srcIp.getDestIpAddress());
* if(matcherV4.matches()) { dstIp.setDstIp(srcIp.getDestIpAddress());
* dstIp.setDstIpMask("255.255.255.255"); }else if(matcherV6.matches()) {
* dstIp.setDstIp(srcIp.getDestIpAddress());
* dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); }else { throw
* new RuntimeException("invalid ip format"); } }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
}
} else {
if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6目的ip为ipv4
dstIp.setDstIp(srcIp.getDestIpAddress());
dstIp.setDstIpMask("255.255.255.255");
} else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4目的ip为ipv6
dstIp.setDstIp(srcIp.getDestIpAddress());
dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF");
} /*
* else {//all dstIp.setDstIp(srcIp.getDestIpAddress());
* dstIp.setDstIpMask("255.255.255.255"); }
*/
else {
throw new RuntimeException("Unsupported IP type " + srcIp.getIpType());
}
}
if (srcIp.getSrcPort() != null) {
if (srcIp.getSrcPort().indexOf("/") != -1) {
String srcMaskNum = srcIp.getSrcPort().split("/")[1];
dstIp.setSrcPortMask(srcMaskNum);
dstIp.setSrcPort(srcIp.getSrcPort().split("/")[0]);
} else {
dstIp.setSrcPort(srcIp.getSrcPort());
dstIp.setSrcPortMask("65535");
}
} else {
dstIp.setSrcPort("0");
dstIp.setSrcPortMask("65535");
}
if (srcIp.getDestPort() != null) {
if (srcIp.getDestPort().indexOf("/") != -1) {
String dstMaskNum = srcIp.getDestPort().split("/")[1];
dstIp.setDstPortMask(dstMaskNum);
dstIp.setDstPort(srcIp.getDestPort().split("/")[0]);
} else {
dstIp.setDstPort(srcIp.getDestPort());
dstIp.setDstPortMask("65535");
}
} else {
dstIp.setDstPort("0");
dstIp.setDstPortMask("65535");
}
ipConvertList.add(dstIp);
}
return ipConvertList;
}
/**
* 设置端口值
*
* @param dstIp
* @param srcIp
*/
public static void convertPortValues(IpCfg dstIp, BaseIpCfg srcIp) {
if (srcIp.getSrcPort() != null) {
if (srcIp.getSrcPort().indexOf("/") != -1) {
String srcMaskNum = srcIp.getSrcPort().split("/")[1];
dstIp.setSrcPortMask(srcMaskNum);
dstIp.setSrcPort(srcIp.getSrcPort().split("/")[0]);
} else {
dstIp.setSrcPort(srcIp.getSrcPort());
dstIp.setSrcPortMask("65535");
}
} else {
dstIp.setSrcPort("0");
dstIp.setSrcPortMask("65535");
}
if (srcIp.getDestPort() != null) {
if (srcIp.getDestPort().indexOf("/") != -1) {
String dstMaskNum = srcIp.getDestPort().split("/")[1];
dstIp.setDstPortMask(dstMaskNum);
dstIp.setDstPort(srcIp.getDestPort().split("/")[0]);
} else {
dstIp.setDstPort(srcIp.getDestPort());
dstIp.setDstPortMask("65535");
}
} else {
dstIp.setDstPort("0");
dstIp.setDstPortMask("65535");
}
}
}

View File

@@ -2,6 +2,7 @@ package com.nis.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -11,6 +12,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.nis.domain.SysDataDictionaryItem;
import com.nis.domain.SysDataDictionaryName;
import com.nis.domain.basics.AsnGroupInfo;
import com.nis.domain.basics.ServiceDictInfo;
import com.nis.domain.basics.SysDictInfo;
import com.nis.domain.configuration.BaseStringCfg;
@@ -18,6 +20,7 @@ import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.PxyObjTrustedCaCrl;
import com.nis.domain.specific.SpecificServiceCfg;
import com.nis.web.dao.SysDictDao;
import com.nis.web.dao.basics.AsnGroupInfoDao;
import com.nis.web.dao.basics.ServiceDictInfoDao;
import com.nis.web.dao.basics.SysDictInfoDao;
import com.nis.web.dao.configuration.PxyObjKeyringDao;
@@ -41,6 +44,7 @@ public class ConfigDictUtils {
private final static SpecificServiceCfgDao specificServiceCfgDao = SpringContextHolder.getBean(SpecificServiceCfgDao.class);
private final static WebsiteCfgDao websiteCfgDao = SpringContextHolder.getBean(WebsiteCfgDao.class);
private final static PxyObjKeyringDao pxyObjKeyringDao = SpringContextHolder.getBean(PxyObjKeyringDao.class);
private final static AsnGroupInfoDao asnGroupInfoDao = SpringContextHolder.getBean(AsnGroupInfoDao.class);
/**
* 根据主键查询配置详情
@@ -203,4 +207,37 @@ public class ConfigDictUtils {
}
return crlFIle;
}
/**
* 根据compileId获取配置内容
* @param compileId
* @return
*/
public static List<Integer> getASNIPNum(Integer groupId ) {
List<Integer> ipNum=new ArrayList<>();
try {
if(!StringUtil.isEmpty(groupId)){
List<Object[]> list=asnGroupInfoDao.getASNIPNum(groupId);
if(!StringUtil.isEmpty(list)){
int index=0;
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
if(index==0){
Map map=(Map) iterator.next();
if(map != null){
ipNum.add(0, (Integer) map.get("v4_num"));
ipNum.add(1, (Integer) map.get("v6_num"));
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
if(ipNum ==null || ipNum.size()==0){
ipNum.add(0, 0);
ipNum.add(1, 0);
}
return ipNum;
}
}

View File

@@ -356,7 +356,7 @@ public class ConfigServiceUtil {
}else if(type==2){
url = url+Constants.CALLBACK_CFG;
}else if(type==3) {
url = url+Constants.DELETE_COMMON_REIGON;
url = url+Constants.GROUP_REUSE_SOURCES;
}
//创建连接
WebTarget wt = ClientUtil.getWebTarger(url);
@@ -400,9 +400,9 @@ public class ConfigServiceUtil {
url = url+Constants.MAAT_CFG;
}else if(type==2){
url = url+Constants.CALLBACK_CFG;
}/*else if(type==3) {
}else if(type==3) {
url = url+Constants.GROUP_REUSE_SOURCES;
}*/
}
logger.info("put url:"+url);
//创建连接
try {
@@ -451,6 +451,7 @@ public class ConfigServiceUtil {
JSONObject resObject = JSONObject.fromObject(result);
bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class);
}else{
logger.info("获取文件摘要响应结果"+result);
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}
} catch (Exception e) {
@@ -463,43 +464,26 @@ public class ConfigServiceUtil {
return bean;
}
/**
* 分组复用域配置新增,修改,删除
* 分组复用域配置新增
* @param params
* @return
* @throws MaatConvertException
*/
public static ToMaatResult auditCommonGroupRegionSources(String params,Integer action) throws MaatConvertException{
public static ToMaatResult postGroupReuseSources(String params) throws MaatConvertException{
ToMaatResult bean = null;
Response response=null;
try {
logger.warn("postGroupReuseSources start");
long start=System.currentTimeMillis();
String result = null;
String url = "";
if(action.equals(Constants.OPACTION_POST)){
url=Constants.SERVICE_URL+Constants.ADD_COMMON_REGION;
}
if(action.equals(Constants.OPACTION_PUT)){
url=Constants.SERVICE_URL+Constants.UPDATE_COMMON_REIGON;
}
if(action.equals(Constants.OPACTION_DELETE)){
url=Constants.SERVICE_URL+Constants.DELETE_COMMON_REIGON;
}
String url = Constants.SERVICE_URL+Constants.GROUP_REUSE_SOURCES;
//创建连接
WebTarget wt = ClientUtil.getWebTarger(url);
logger.info("auditCommonGroupRegionSources url:"+url);
logger.info("postGroupReuseSources url:"+url);
//获取响应结果
Builder header = wt.request(MediaType.APPLICATION_JSON).header("Content-Type", MediaType.APPLICATION_JSON);
try {
if(action.equals(Constants.OPACTION_POST)){
response= header.post(Entity.entity(params, MediaType.APPLICATION_JSON));
}
if(action.equals(Constants.OPACTION_PUT)){
response= header.put(Entity.entity(params, MediaType.APPLICATION_JSON));
}
if(action.equals(Constants.OPACTION_DELETE)){
response= header.put(Entity.entity(params, MediaType.APPLICATION_JSON));
}
response= header.post(Entity.entity(params, MediaType.APPLICATION_JSON));
if(response != null) {
result=response.readEntity(String.class);
}
@@ -515,7 +499,7 @@ public class ConfigServiceUtil {
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}
long end=System.currentTimeMillis();
logger.warn("auditCommonGroupRegionSources end,cost:"+(end-start));
logger.warn("postGroupReuseSources end,cost:"+(end-start));
} catch (Exception e) {
throw e;
} finally {
@@ -525,7 +509,6 @@ public class ConfigServiceUtil {
}
return bean;
}
/**
*
* getReport(配置日志总量统计查询)
@@ -744,11 +727,21 @@ public class ConfigServiceUtil {
result= response.readEntity(String.class);
logger.info("cgi info:"+result);
}else{
if(response!= null) {
throw new MaatConvertException("<spring:message code=\"cgi_service_failed\"/>:"+response.readEntity(String.class));
}else {
throw new MaatConvertException("<spring:message code=\"cgi_service_failed\"/>");
Map<String, String> map = new HashMap<String, String>();
result= response.readEntity(String.class);
if(!StringUtil.isEmpty(result)){
map = (Map<String, String>) JSON.parse(result);
String error = map.get("error");
if (!StringUtil.isEmpty(error)) {
error=cgiError(error);
throw new MaatConvertException(error);
}else{
throw new MaatConvertException(null);
}
}else{
throw new MaatConvertException(null);
}
}
} catch (Exception e) {
throw e;
@@ -760,6 +753,28 @@ public class ConfigServiceUtil {
return result;
}
public static String cgiError(String error){
String cgiError="";
String er=error.toLowerCase().trim();
String errors=Constants.CGI_ERROR;
if(!StringUtil.isEmpty(errors)){
String [] ers=errors.toLowerCase().split(",");
for (int i = 0; i < ers.length; i++) {
if(ers[i].trim().equals(er)){
cgiError=error;
break;
}
}
}
return cgiError;
}
/**
* 配置全量更新指令下发
* @param params
@@ -785,10 +800,11 @@ public class ConfigServiceUtil {
}
} catch (Exception e) {
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>");
}
}
bean = JSONObject.fromObject(result);
if(response != null && response.getStatus() == 200){
logger.info("get result success");
bean = JSONObject.fromObject(result);
}else{
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}
@@ -830,6 +846,7 @@ public class ConfigServiceUtil {
}
if(response != null && response.getStatus() == 200){
logger.info("get result success");
//result="{\"status\": 201,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":0,\"opTime\":\"2016-11-22 08:31:27\"}]}";
bean= JSONObject.fromObject(result);
}else{
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);

View File

@@ -13,9 +13,7 @@ public final class Constants {
*/
public static final int IMPORT_LIMIT=Configurations.getIntProperty("import_limit",10000);
public static final Object IMPORT_LOCK=new Object();
public static final String ADD_COMMON_REGION=Configurations.getStringProperty("addRegionToCommonGroup","");
public static final String UPDATE_COMMON_REIGON=Configurations.getStringProperty("updateRegionToCommonGroup","");
public static final String DELETE_COMMON_REIGON=Configurations.getStringProperty("deleteRegionToCommonGroup","");
public static final String GROUP_REUSE_SOURCES=Configurations.getStringProperty("groupReuseSources","groupReuseSources");
public static Integer APP_SPEC_SERVICE_CODE_MIN_VAL=Configurations.getIntProperty("app_spec_service_code_min_val", 300001);
public static Integer APP_SPEC_SERVICE_CODE_MAX_VAL=Configurations.getIntProperty("app_spec_service_code_max_val", 268435455);
public static String APP_CFG_USERREGION_SPLITOR=Configurations.getStringProperty("app_cfg_userregion_splitor", "&");
@@ -496,8 +494,6 @@ public final class Constants {
public static final String HTTP_URL_REGION = Configurations.getStringProperty("http_url_region","http_url");
public static final String VOIP_IP_REGION = Configurations.getStringProperty("voip_ip","av_voip_ip");
public static final String VOIP_ACCOUNT_REGION = Configurations.getStringProperty("voip_account","av_voip_account");
public static final String NTC_ASN_NUMBER = Configurations.getStringProperty("ntc_asn_number","NTC_ASN_NUMBER");
public static final String ASN_KEY = Configurations.getStringProperty("asn_key","AS");
public static final String MAAT_VERSION = Configurations.getStringProperty("maat_version","1.0");
public static final Integer INSERT_ACTION = Configurations.getIntProperty("insert_action",1);
public static final Integer UPDATE_ACTION = Configurations.getIntProperty("update_action",2);
@@ -723,6 +719,9 @@ public final class Constants {
public static final String TREND_TOTAL_REPORT=Configurations.getStringProperty("trendTotalReport","trendTotalReport");
public static final String TRAFFIC_APP_TREND=Configurations.getStringProperty("trafficAppTrend","trafficAppTrend");
public static final String APPCONN_RECORD_TOP100=Configurations.getStringProperty("appConnRecordTop100","appConnRecordTop100");
public static final String TRAFFIC_APP_PPS_TREND=Configurations.getStringProperty("trafficAppPpsTrend","trafficAppPpsTrend");
public static final String TRAFFIC_APP_BPS_TREND=Configurations.getStringProperty("trafficAppBpsTrend","trafficAppBpsTrend");
/**
* httpclient 工具超时时间设置
*/
@@ -818,4 +817,16 @@ public final class Constants {
* 流量日志的HTTP泛收接口URL
*/
public static final String NTC_HTTP_RECORD_LOG = Configurations.getStringProperty("ntcHttpRecordLog","");
/**
* 日期格式化
*/
public static final String COMMON_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 时间格式化
*/
public static final String COMMON_TIME_FORMAT = "HH:mm:ss";
/**
* vpn cgi接口报错信息
*/
public static final String CGI_ERROR = Configurations.getStringProperty("cgiError","");;
}

View File

@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Node;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -246,6 +247,24 @@ public class DictUtils {
return allDictList;
}
/**
* 功能业务字典,获取相应功能菜单对应的业务信息
* @param functionId
* @return
*/
public static List<FunctionServiceDict> getAllServiceList(){
List<FunctionServiceDict> serviceList = new ArrayList();
ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil();
List<Node> serviceNodeList= serviceTemplate.getServiceNodeList();
for (Node node : serviceNodeList) {
FunctionServiceDict service=new FunctionServiceDict();
service.setServiceId(Integer.valueOf(node.valueOf("@id")));
service.setServiceName(node.valueOf("@desc"));
serviceList.add(service);
}
return serviceList;
}
/**
* 功能配置域字典,获取相应功能菜单对应的配置域信息
* @param functionId

View File

@@ -0,0 +1,759 @@
package com.nis.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nis.domain.Nets;
import javax.servlet.http.HttpServletRequest;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* <p>对IPV4进行处理工具类.</p>
* @author 中电积至有限公司 darnell
* @version 1.0 创建时间2018-08-30
*
*/
public class IPUtil {
private static Logger logger = LoggerFactory.getLogger(IPUtil.class);
private static byte pos []= new byte []{(byte)128,64,32,16,8,4,2,1};
private static final Pattern IPV4Pattern = Pattern.
compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");
private static final Pattern IPV6_STD_PATTERN =
Pattern.compile(
"^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$");
private static final Pattern IPV6_HEX_COMPRESSED_PATTERN =
Pattern.compile(
"^((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)$");
/**
*
* <p>将10进制IP转为字符串网络序。IP((0-255).(0-255).(0-255).(0-255))格式.
* ip10为字符串形式能给处理带来方便.
* </p>
* <pre>
* IpUtil.getIpString("3232235777") = "192.168.1.1"
* </pre>
* @see #getIpDesimal(String)
* @param ip10 10进制IP
* @return 返回如<code>0.0.0.0</code>格式IP
*/
public static String getIpString(String ip10) {
StringBuffer sb = new StringBuffer("");
if (ip10.indexOf("-") > -1) {
Integer intIP = Integer.parseInt(setStrEmpty(ip10));
sb.append(String.valueOf(intIP&0x000000FF));
sb.append(".");
sb.append(String.valueOf((intIP&0x0000FFFF)>>>8));
sb.append(".");//将高8位置0然后右移16位
sb.append(String.valueOf((intIP&0x00FFFFFF)>>>16));
sb.append(".");
sb.append(String.valueOf(intIP>>>24&0xFF));//直接右移24位
return sb.toString();
} else {
Long longIP = Long.parseLong(setStrEmpty(ip10));
sb.append(String.valueOf(longIP&0x000000FF));
sb.append(".");
sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
sb.append(".");//将高8位置0然后右移16位
sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
sb.append(".");
sb.append(String.valueOf(longIP>>>24&0xFF));//直接右移24位
return sb.toString();
}
}
/**
*
* <p>将10进制IP转为字符串主机序。IP((0-255).(0-255).(0-255).(0-255))格式.
* ip10为字符串形式能给处理带来方便.
* </p>
* <pre>
* IpUtil.getIpHostString("3232235777") = "192.168.1.1"
* </pre>
* @see #getIpDesimal(String)
* @param ip10 10进制IP
* @return 返回如<code>0.0.0.0</code>格式IP
*/
//将10进制整数形式转换成127.0.0.1形式的IP地址按网络序
public static String getIpHostString(String ip10) {
StringBuffer sb = new StringBuffer(32);
if (ip10.indexOf("-") > -1) {
Integer intIP = Integer.parseInt(setStrEmpty(ip10));
sb.append(String.valueOf(intIP >>> 24));// 直接右移24位
sb.append(".");
sb.append(String.valueOf((intIP & 0x00FFFFFF) >>> 16)); // 将高8位置0然后右移16位
sb.append(".");
sb.append(String.valueOf((intIP & 0x0000FFFF) >>> 8));
sb.append(".");
sb.append(String.valueOf(intIP & 0x000000FF));
return sb.toString();
} else {
Long longIP = Long.parseLong(setStrEmpty(ip10));
sb.append(String.valueOf(longIP >>> 24));// 直接右移24位
sb.append(".");
sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16)); // 将高8位置0然后右移16位
sb.append(".");
sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));
sb.append(".");
sb.append(String.valueOf(longIP & 0x000000FF));
return sb.toString();
}
}
/**
* 判断一个IP地址是否属于某一个子网
*
* @param ip IP地址
* @param prefix 子网地址
* @param prefixLen 掩码长度
* @return true or false
*/
public static boolean inPrefix(String ip, String prefix, int prefixLen) {
String binPrefix = toBinaryString(prefix);
if (binPrefix.length() > prefixLen) {
binPrefix = binPrefix.substring(0,prefixLen);
}
String binIP = toBinaryString(ip);
binIP = binIP.substring(0,prefixLen);
if (binIP.equals(binPrefix)) {
return true;
} else {
return false;
}
}
/**
* 获得两个IP间的范围如192.168.0.128-192.168.2.256。
* 注意:本方法不做合法性检查!
*
* @param startIp 起始IP
* @param endIp 中止IP
* @return 范围内的IP地址数组
*/
public static List<String> getIPRange(String startIp, String endIp) {
List<String> list = new ArrayList<String>();
try{
long start = getIpHostDesimal(startIp);
long end = getIpHostDesimal(endIp);
for (long i = start; i <= end; i++) {
list.add(getIpHostString(String.valueOf(i)));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 验证IP为保留三个IP区域私有地址
* @param ip IPV4
* @return boolean true 私有地址 false 公有地址
*/
public static boolean internalIp(String ip) {
byte[] addr = getAddress(ip);
return internalIp(addr);
}
private static boolean internalIp(byte[] addr) {
final byte b0 = addr[0];
final byte b1 = addr[1];
//10.x.x.x/8
final byte SECTION_1 = 0x0A;
//172.16.x.x/12
final byte SECTION_2 = (byte) 0xAC;
final byte SECTION_3 = (byte) 0x10;
final byte SECTION_4 = (byte) 0x1F;
//192.168.x.x/16
final byte SECTION_5 = (byte) 0xC0;
final byte SECTION_6 = (byte) 0xA8;
switch (b0) {
case SECTION_1:
return true;
case SECTION_2:
if (b1 >= SECTION_3 && b1 <= SECTION_4) {
return true;
}
case SECTION_5:
switch (b1) {
case SECTION_6:
return true;
}
default:
return false;
}
}
/**
* 获得子网的所有IP地址192.168.0.1/24。
* 注意:本方法不做合法性检查!
* @param prefix 子网所属IP地址
* @param prefixLen 子网掩码
* @return List<String>
*/
public static List<String> getIPRange(String prefix, int prefixLen) {
String binPrefix = toBinaryString(prefix);
if (binPrefix.length() > prefixLen) {
binPrefix = binPrefix.substring(0,prefixLen);
}
StringBuffer ip1 = new StringBuffer(binPrefix);
StringBuffer ip2 = new StringBuffer(binPrefix);
for (int i = ip1.length(); i < 32; i++) {
ip1.append('0');
}
for (int i = ip2.length(); i < 32; i++) {
ip2.append('1');
}
return getIPRange(toIPString(ip1.toString()),toIPString(ip2.toString()));
}
/**
*
* <p>根据标准ip段获取该段子网掩码
* </p>
* @param startIP 起始ipendIP 结束ip
* @return 返回如<code>子网掩码</code>格式IP
*/
public static String getMask(String startIP,String endIP) {
byte start [] = getAddress(startIP);
byte end [] = getAddress(endIP);
byte mask [] = new byte [start.length];
boolean flag=false;
for(int i=0; i<start.length; i++){
mask[i]=(byte)~(start[i]^end[i]);
if (flag) {
mask[i]=0;
}
if(mask[i]!=-1){
mask[i]=getMask(mask[i]);
flag=true;
}
}
return toString(mask);
}
private static byte getMask(byte b) {
if (b==0) {
return b;
}
byte p = pos[0];
for(int i=0;i<8;i++){
if ((b&pos[i])==0) {
break;
}
p=(byte)(p>>1);
}
p=(byte)(p<<1);
return (byte)(b&p);
}
private static byte[] getAddress(String address) {
String subStr [] = address.split("\\.");
if(subStr.length!=4) {
throw new IllegalArgumentException("所传入的IP地址不符合IPv4的规范");
}
byte b [] = new byte [4];
for (int i=0;i<b.length;i++) {
b [i]=(byte)Integer.parseInt(subStr[i]);
}
return b;
}
/**
* 将IPv4形式掩码形式转为整型掩码位数
* @param netmarks
* @return
*/
public static int getNetMask(String netmarks)
{
if(!isMask(netmarks)){
throw(new RuntimeException("掩码格式错误!"));
}
StringBuffer sbf;
String str;
int inetmask=0,count=0;
String[] ipList=netmarks.split("\\.");
for(int n=0;n<ipList.length;n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str=sbf.reverse().toString();
count=0;
for(int i=0;i<str.length();i++){
i=str.indexOf('1',i);
if(i==-1){break;}
count++;
}
inetmask+=count;
}
return inetmask;
}
/**
* 计算子网大小
* @param netmask
* @return
*/
public static int getPoolMax(int netmask)
{
if(netmask<=0||netmask>=32)
{
return 0;
}
int bits=32-netmask;
return (int) Math.pow(2,bits) -2;
}
private static StringBuffer toBin(int x)
{
StringBuffer result=new StringBuffer();
result.append(x%2);
x/=2;
while(x>0){
result.append(x%2);
x/=2;
}
return result;
}
/**
* 根据起始IP地址和子网掩码计算终止IP
* @return String 子网的结束IP
*/
public static String getEndIP(String StartIP,int netmask)
{
return getEndIP(StartIP,convertMask(netmask));
}
/**
* 根据起始IP地址和子网掩码计算终止IP
* @return String 子网的结束IP
*/
public static String getEndIP(String StartIP, String netmask)
{
Nets nets = new Nets();
String[] start=Negation(StartIP,netmask).split("\\.");
nets.setStartIP(start[0]+"."+start[1]+"."+start[2]+"."+(Integer.valueOf(start[3])+1));
nets.setEndIP(TaskOR(Negation(StartIP,netmask),netmask));
nets.setNetMask(netmask);
return nets.getEndIP();
}
/**
* temp1根据temp2取反
*/
private static String Negation(String StartIP,String netmask)
{
String[] temp1=StartIP.trim().split("\\.");
String[] temp2=netmask.trim().split("\\.");
int[] rets=new int[4];
for (int i =0;i<4;i++) {
rets[i]=Integer.parseInt(temp1[i])&Integer.parseInt(temp2[i]);
}
return rets[0]+"."+rets[1]+"."+rets[2]+"."+rets[3];
}
/**
* temp1根据temp2取或
*/
private static String TaskOR(String StartIP,String netmask)
{
String[] temp1=StartIP.trim().split("\\.");
String[] temp2=netmask.trim().split("\\.");
int[] rets=new int[4];
for (int i =0;i<4;i++) {
rets[i]=255-(Integer.parseInt(temp1[i])^Integer.parseInt(temp2[i]));
}
//return rets[0]+"."+rets[1]+"."+rets[2]+"."+(rets[3]-1);
return rets[0]+"."+rets[1]+"."+rets[2]+"."+(rets[3]);
}
/**
* <p>将整型的掩码转换成IPv4型(30 -> 255.255.255.252).</p>
*
* @param mask 整型掩码.
* @return IPv4型掩码.
* @exception RuntimeException 掩码错误.
*/
public static String convertMask(int mask) {
if (mask > 32 || mask < 8) {
throw(new RuntimeException("掩码错误应为8-32的整数。"));
}
return toIPString(maskToBinaryString(mask));
}
/**
* <p>将整型的掩码转换成反向IPv4型(30 -> 255.255.255.252).</p>
*
* @param mask 整型掩码.
* @return IPv4型反向掩码.
* @exception Exception 掩码错误.
*/
public static String convertReverseMask(int mask) throws Exception {
if (mask > 32 || mask < 8) {
throw(new Exception("掩码错误应为8-32的整数。"));
}
return toIPString(reverseMaskToBinaryString(mask));
}
/**
* 将整型掩码转换成二进制字符串
* @param mask 整型掩码
* @return 二进制型掩码.
*/
private static String maskToBinaryString(int mask) {
StringBuffer str = new StringBuffer();
for(int i=1;i<=32;i++) {
if (i <= mask) {
str.append('1');
} else {
str.append('0');
}
}
return str.toString();
}
/**
* 将整型掩码转换成二进制字符串
* @param mask 整型掩码
* @return 反向二进制型掩码.
*/
private static String reverseMaskToBinaryString(int mask) {
StringBuffer str = new StringBuffer();
for(int i=1;i<=32;i++) {
if (i <= mask) {
str.append('0');
} else {
str.append('1');
}
}
return str.toString();
}
/**
* 将二进制字符串转换成IPv4型字符串
* @param binary 二进制字符串
* @return IPv4型IP.
*/
private static String toIPString(String binary) {
if (binary.length() < 32) {
for (int i=binary.length();i<32;i++) {
binary = "0" + binary;
}
}
String part1 = binary.substring(0,8);
String part2 = binary.substring(8,16);
String part3 = binary.substring(16,24);
String part4 = binary.substring(24);
return Integer.parseInt(part1,2) + "."
+ Integer.parseInt(part2,2) + "."
+ Integer.parseInt(part3,2) + "."
+ Integer.parseInt(part4,2);
}
/**
* 获取子网的网络地址.
*
* @param ip IP地址.
* @param mask 掩码.
* @return 网络地址.
* @exception Exception IP地址错误或掩码错误.
*/
public static String getSubNetIP(String ip, int mask) throws Exception {
if (!isIP(ip)) {
throw(new Exception("IP地址不合法"));
}
String s1 = toBinaryString(ip);
String s2 = maskToBinaryString(mask);
return toIPString(Long.toBinaryString(Long.parseLong(s1,2)&Long.parseLong(s2,2)));
}
/**
* <p>将整型掩码转换成IPv4型的反码(30 -> 0.0.0.3).</p>
*
* @param mask 整型掩码.
* @return IPv4型反码.
* @exception Exception 掩码错误.
*/
public static String reverseMask(int mask) throws Exception {
if (mask > 32 || mask < 8) {
throw(new Exception("掩码错误应为8-32的整数。"));
}
String str = maskToBinaryString(mask);
str = str.replace('0','2');
str = str.replace('1','0');
str = str.replace('2','1');
return toIPString(str);
}
/**
* 将IPv4型字符串转换成长度为32的二进制字符串
* 需要加验证是否为IP
*/
public static String toBinaryString(String ip) {
String[] array = ip.split("[.]");
String str = "";
for (int i=0; i<array.length; i++) {
String s = Integer.toBinaryString(Integer.parseInt(array[i]));
if (s.length() < 8) {
for (int j=s.length();j<8;j++) {
s = "0" + s;
}
}
str += s;
}
return str;
}
/**
*
* <p>验证Ip是否符合规则.给定字符串,判断是否符合正则验证的ip格式.</p>
* <pre>例子说明:</pre>
* @param ip ip字符
* @return <code>true</code> ip符合验证规则, <code>false</code> ip不符合验证规则.
*/
public static boolean isIP(String ip) {
if (ip == null) {
return false;
}
Matcher mat = IPV4Pattern.matcher(ip);
return mat.matches();
}
public static boolean isIPv6StdAddress(final String input) {
return IPV6_STD_PATTERN.matcher(input).matches();
}
public static boolean isIPv6HexCompressedAddress(final String input) {
return IPV6_HEX_COMPRESSED_PATTERN.matcher(input).matches();
}
public static boolean isIPv6Address(final String input) {
return isIPv6StdAddress(input) || isIPv6HexCompressedAddress(input);
}
/**
*
* <p>在web方式下获取客户端IP地址.</p>
* <p>
* 使用该方法,需要在有javaee.jar扩展包前提下.
* </p>
* @param request HttpServletRequest请求对象
* @return 返回字符串IP地址
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
/**
*
* <p>验证mask是否符合规则.给定字符串,判断是否符合正则验证的mask格式.</p>
* <pre>例子说明:</pre>
* @param mask mask字符
* @return <code>true</code> mask符合验证规则, <code>false</code> mask不符合验证规则.
*/
public static boolean isMask(String mask) {
if (mask == null) {
return false;
}
if(!isIP(mask)){
return false;
}
String[] ips = mask.split("\\.");
String binaryVal = "";
for (int i = 0; i < ips.length; i++)
{
String binaryStr = Integer.toBinaryString(Integer.parseInt(ips[i]));
Integer times = 8 - binaryStr.length();
for(int j = 0; j < times; j++)
{
binaryStr = "0" + binaryStr;
}
binaryVal += binaryStr;
}
if(binaryVal.indexOf("01")!=-1){
return false;
}
return true;
}
/**
*
* <p>将IP进制转换成十进制网络字节序</p>
* <p>
* IP是一个字符串符合IP的规则(0-255).(0-255).(0-255).(0-255).
* 将ip转换成长整型的原因是处理时间类型简单入库节省空间,查询提高效率.
* </p>
* <pre>
* IpUtil.getIpDesimal("192.168.1.1") = 3232235777
* IpUtil.getIpDesimal("192.168.1.256") = -1 //不符合Ip规则
* </pre>
* @see #getIpString(String)
* @param ip 符合IP规则的字符串
* @return <code>-1</code> 验证ip不合法,<code>ip</code> 计算ip返回长整型.
*/
public static long getIpDesimal(String ip) {
long ip10 = 0;
if (!isIP(ip)) {
return -1; // ip 不合法
}
String[] ss = ip.trim().split("\\.");
for (int i = 0; i < 4; i++) {
ip10 += Math.pow(256, i) * Long.parseLong(ss[i]);
}
return ip10;
}
/**
*
* <p>将IP进制转换成十进制主机字节序</p>
* <p>
* IP是一个字符串符合IP的规则(0-255).(0-255).(0-255).(0-255).
* 将ip转换成长整型的原因是处理时间类型简单入库节省空间,查询提高效率.
* </p>
* <pre>
* IpUtil.getIpHostDesimal("192.168.1.1") = 3232235777
* IpUtil.getIpHostDesimal("192.168.1.256") = -1 //不符合Ip规则
* </pre>
* @see #getIpString(String)
* @param ip 符合IP规则的字符串
* @return <code>-1</code> 验证ip不合法,<code>ip</code> 计算ip返回长整型.
*/
public static long getIpHostDesimal(String ip) {
long ip10 = 0;
if (!isIP(ip)) {
return -1; // ip 不合法
}
String[] ss = ip.trim().split("\\.");
for (int i = 0; i < 4; i++) {
ip10 += Math.pow(256, 3 - i) * Long.parseLong(ss[i]);
}
return ip10;
}
/**
*
* <p>获取IP/mask 包含IP数量适合完整IPw网段</p>
* <p>
*
*
* </p>
* <pre>
*
*
* </pre>
* @param ip 符合IP规则的字符串
* @param mask 掩码格式
* @return <code>-1</code> 验证ip不合法,<code>ip</code> 计算ip返回长整型.
*/
public static long getIpNum(String ip, int mask) {
long num = 0;
if (isIP(ip)) {
String endIp = getEndIP(ip, mask);
num = getIpHostDesimal(endIp) - getIpHostDesimal(ip) +1;
} else {
throw new IllegalArgumentException("所传入的IP地址不符合IPV4规范");
}
return num;
}
// 此方法用于判断数据为空就置为0
private static String setStrEmpty(String str) {
if ("".equals(str) || str == null) {
str = "0";
}
return str;
}
private static String toString(byte[] address) {
StringWriter sw = new StringWriter(16);
sw.write(Integer.toString(address[0]&0xFF));
for(int i=1;i<address.length;i++){
sw.write(".");
sw.write(Integer.toString(address[i]&0xFF));
}
return sw.toString();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +1,66 @@
package com.nis.util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import com.beust.jcommander.internal.Sets;
import com.nis.domain.FunctionServiceDict;
import jersey.repackaged.com.google.common.collect.Lists;
@SuppressWarnings("all")
public class ServiceConfigTemplateUtil {
private Logger logger = Logger.getLogger(getClass());
private static final Logger logger = Logger.getLogger(ServiceConfigTemplateUtil.class);
private Node root;
private static Node root;
static {
if(root == null) {//2018年12月28日11:37:50 fang 改为只加载一次,且方法改为 static
SAXReader reader = new SAXReader();
org.dom4j.Document document = null;
String configPath = "/service/service_config.xml";
InputStream is = null;
try {
is = ServiceConfigTemplateUtil.class.getResourceAsStream(configPath);
document = reader.read(is);
root = document.getRootElement();
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
} finally {
if(is != null ){
try {
is.close();
} catch (IOException e) { }
}
}
}
}
/**
* 配置文件内容
* @return
*/
public ServiceConfigTemplateUtil(){
SAXReader reader = new SAXReader();
org.dom4j.Document document = null;
String configPath = "/service/service_config.xml";
try {
document = reader.read(ServiceConfigTemplateUtil.class.getResourceAsStream(configPath));
root = document.getRootElement();
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
/**
* 获取业务节点列表
* @return
*/
public List<Node> getServiceNodeList(){
public static List<Node> getServiceNodeList(){
List<Node> nodes = root.selectNodes("service");
return nodes;
}
@@ -48,7 +68,7 @@ public class ServiceConfigTemplateUtil {
* 获取业务列表
* @return
*/
public List<Map<String,Object>> getServiceList(){
public static List<Map<String,Object>> getServiceList(){
List<Map<String,Object>> list =new ArrayList();
List<Element> elements = root.selectNodes("service");
for(Element element:elements){
@@ -63,12 +83,47 @@ public class ServiceConfigTemplateUtil {
}
return list;
}
/**
*
* @return
*/
public static Set<String> getCompileTableName(){
Set<String> result = Sets.newHashSet();
List<Element> elements = root.selectNodes("service");
for(Element element:elements){
String ev = element.attribute("tableName").getStringValue();
if(StringUtils.isNotBlank(ev)) {
result.add(ev.toLowerCase());
}
}
return result;
}
/**
* 根据类名 获取对应的 表名
* @param className
* @return
*/
public static String getCfgTableNameByClassName(String className) {
if(className == null) return null;
List<Element> elements = root.selectNodes("service");
for(Element element:elements){
String ev = element.attribute("tableName").getStringValue();
String cn = element.attribute("className").getStringValue();
if(className.equalsIgnoreCase(cn)) {
return ev.toLowerCase();
}
}
return null;
}
/**
*
* @param functionId
* @return
*/
public List<Map<String,Object>> getServiceListByFunctionId(Integer functionId){
public static List<Map<String,Object>> getServiceListByFunctionId(Integer functionId){
List<Map<String,Object>> list =new ArrayList();
if(!StringUtil.isEmpty(functionId)) {
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(functionId);
@@ -133,7 +188,7 @@ public class ServiceConfigTemplateUtil {
* 获取业务配置列表
* @return
*/
public List<Map<String,Object>> getServiceCfgList(Element serviceNode){
public static List<Map<String,Object>> getServiceCfgList(Element serviceNode){
List<Map<String,Object>> list = new ArrayList();
List<Element> elements = serviceNode.selectNodes("serviceCfg");
for(Element element:elements){
@@ -149,7 +204,7 @@ public class ServiceConfigTemplateUtil {
* 获取用户自定义域列表
* @return
*/
public List<Map<String,Object>> getUserRegionList(Element serviceNode){
public static List<Map<String,Object>> getUserRegionList(Element serviceNode){
List<Map<String,Object>> list = new ArrayList();
List<Element> elements = serviceNode.selectNodes("userRegion");
for(Element element:elements){
@@ -167,7 +222,7 @@ public class ServiceConfigTemplateUtil {
* @param attribute
* @return
*/
public List getXmlParamListByTag(String tag,String attribute){
public static List getXmlParamListByTag(String tag,String attribute){
List list =new ArrayList();
List<Element> elements = root.selectNodes(tag);
for(Element element:elements){
@@ -196,6 +251,7 @@ public class ServiceConfigTemplateUtil {
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

View File

@@ -268,6 +268,7 @@ public class ExcelCsv {
for (String key : keyList) {
List<E> list=dataMap.get(key);
List<List<String>> listT=new ArrayList<List<String>>();
for (E e : list){
int colunm = 0;
List<String> lisb=new ArrayList<String>();
@@ -286,8 +287,8 @@ public class ExcelCsv {
}
}
// If is dict, get dict label
String valStr=val==null?"":val.toString();
if (StringUtils.isNotBlank(ef.dictType())){
String valStr=val==null?"":val.toString();
if("type".equals(ef.dictType()) || "attribute".equals(ef.dictType())
|| "label".equals(ef.dictType())){
// Get basic info
@@ -297,9 +298,34 @@ public class ExcelCsv {
String dict=DictUtils.getDictLabel(ef.dictType(), valStr, valStr);
//如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了
val = msgProp.getProperty(dict,dict);
//业务配置-stream 阻断类型中 阻断 改为 封堵(丢弃)
if("block_type".equals(ef.title()) && dict.equals("action_reject")
&& (Reflections.invokeGetter(e, "serviceId").toString().equals("35")
|| Reflections.invokeGetter(e, "serviceId").toString().equals("33")
|| Reflections.invokeGetter(e, "serviceId").toString().equals("36"))){
dict="block_drop";
val = msgProp.getProperty(dict,dict);
}
//ip spoofing redirect动作修改为Spoofing
if(ef.title().equals("block_type")
&& (Reflections.invokeGetter(e, "serviceId").toString().equals("518"))) {
dict="action_spoofing";
val = msgProp.getProperty(dict,dict);
}
}
}
if(ef.title().equals("whether_area_block")&&!StringUtil.isEmpty(val)){
Integer whetherAreaBlock=Integer.parseInt(valStr);
if(whetherAreaBlock.equals(0)){
val = msgProp.getProperty("all","all");
}else if(whetherAreaBlock.equals(1)){
val = msgProp.getProperty("selective","selective");
}else{
val ="";
}
}
if(ef.title().equals("is_hex") && !StringUtil.isEmpty(val)){
Integer isHex=Integer.parseInt(val.toString());
if(isHex.equals(0) || isHex.equals(2)){
@@ -312,7 +338,7 @@ public class ExcelCsv {
}
if(ef.title().equals("is_case_insenstive") && !StringUtil.isEmpty(val)){
Integer isCaseSenstive=Integer.parseInt(val.toString());
if(isCaseSenstive.equals(0) || isCaseSenstive.equals(1)){
if(isCaseSenstive.equals(0)){
val = msgProp.getProperty("case_insenstive","case_insenstive");
}else if(isCaseSenstive.equals(1)){
val = msgProp.getProperty("case_senstive","case_senstive");

View File

@@ -496,7 +496,7 @@ public class ExportExcel {
commentStr=commentStr+""+msgProp.getProperty("required")+"\n";
index++;
}
if(("domain_name".equals(headerStr)) && (region.getFunctionId().equals(560))){
if("domain_name".equals(headerStr)){
commentStr=commentStr+msgProp.getProperty("rule_desc_tip")+":\n";
index++;
//1、非空
@@ -536,6 +536,29 @@ public class ExportExcel {
index++;
}
}
//doBlackList
if("doBlacklist".equals(headerStr)) {
commentStr="";
List<SysDataDictionaryItem> 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))){
@@ -1113,9 +1136,9 @@ public class ExportExcel {
commentStr="";
}
if(StringUtil.isEmpty(defaultValue)){
defaultValue="0";
defaultValue = region.getConfigDirection().split(",")[0];
}
defaultValue = region.getFunctionId().equals(301)?"1":defaultValue;
}
/*}*/
/*if(StringUtil.isEmpty(commentStr)){
@@ -2266,6 +2289,20 @@ public class ExportExcel {
String dict=DictUtils.getDictLabel(ef.dictType(), valStr, valStr);
//如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了
val = msgProp.getProperty(dict,dict);
//业务配置-stream 阻断类型中 阻断 改为 封堵(丢弃)
if("block_type".equals(ef.title()) && dict.equals("action_reject")
&& (Reflections.invokeGetter(e, "serviceId").toString().equals("35")
|| Reflections.invokeGetter(e, "serviceId").toString().equals("33")
|| Reflections.invokeGetter(e, "serviceId").toString().equals("36"))){
dict="block_drop";
val = msgProp.getProperty(dict,dict);
}
//ip spoofing redirect动作修改为Spoofing
if(ef.title().equals("block_type")
&& (Reflections.invokeGetter(e, "serviceId").toString().equals("518"))) {
dict="action_spoofing";
val = msgProp.getProperty(dict,dict);
}
}
}
@@ -2291,7 +2328,7 @@ public class ExportExcel {
}
if(ef.title().equals("is_case_insenstive") && !StringUtil.isEmpty(val)){
Integer isCaseSenstive=Integer.parseInt(val.toString());
if(isCaseSenstive.equals(0) || isCaseSenstive.equals(1)){
if(isCaseSenstive.equals(0)){
val = msgProp.getProperty("case_insenstive","case_insenstive");
}else if(isCaseSenstive.equals(1)){
val = msgProp.getProperty("case_senstive","case_senstive");

View File

@@ -12,7 +12,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
@@ -20,6 +22,7 @@ import java.util.concurrent.BlockingQueue;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
@@ -426,13 +429,17 @@ public class ImportBigExcel extends XLSXCovertCSVReader{
}
// Get excel data
BlockingQueue<E> _dataList =new ArrayBlockingQueue(dataList.size(),true);
for (int i = 0; i < dataList.size(); i++) {
E e = (E)cls.newInstance();
if(i<=headerNum) {
Map<String, Map<String, Object>> dictMap = new HashMap<String,Map<String, Object>>();
Object val1 = null;
for (int i = 0, len = dataList.size(); i < len; i++) {
List<Object> row=dataList.get(i);
//boolean flag = row.stream().allMatch(obj -> "".equals(obj));
if(i <= headerNum || row.size() == 0) {// 跳过第一行和空行
continue;
}
E e = (E)cls.newInstance();
int column = 0;
List<Object> row=dataList.get(i);
StringBuilder sb = new StringBuilder();
for (Object[] os : annotationList){
Object val=row.get(column);
@@ -441,7 +448,23 @@ public class ImportBigExcel extends XLSXCovertCSVReader{
ExcelField ef = (ExcelField)os[0];
// If is dict type, get dict value
if (StringUtils.isNotBlank(ef.dictType())){
Object val1 = DictUtils.getDictCode(ef.dictType(), val.toString(), "");
// 缓存当前excel文件获取过的字典值
if(!dictMap.containsKey(ef.dictType())) {
val1 = DictUtils.getDictCode(ef.dictType(), val.toString(), "");
Map<String, Object> putMap = new HashMap<String,Object>();
putMap.put(val.toString(), val1);
dictMap.put(ef.dictType(), putMap);
}else {
Map<String, Object> map = dictMap.get(ef.dictType());
if(!map.containsKey(val.toString())) {
val1 = DictUtils.getDictCode(ef.dictType(), val.toString(), "");
map.put(val.toString(), val1);
dictMap.put(ef.dictType(), map);
}else {
val1 = map.get(val.toString());
}
}
//没有获取到字典值的话会影响验证判断
if(val1!=null&&StringUtils.isNotBlank(val1.toString())) {
val=val1;
@@ -468,7 +491,7 @@ public class ImportBigExcel extends XLSXCovertCSVReader{
if(StringUtils.endsWith(s, ".0") && !s.endsWith("0.0.0.0")){
val = StringUtils.substringBefore(s, ".0");
}else{
val = String.valueOf(val.toString().trim());
val=val == null ? "" : StringEscapeUtils.escapeHtml4(val.toString().trim());
}
}else if (valType == Integer.class){
val = Double.valueOf(val.toString().trim()).intValue();

View File

@@ -8,7 +8,9 @@ import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
@@ -32,6 +34,8 @@ import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import com.nis.util.StringUtil;
/**
* 使用CVS模式解决XLSX文件可以有效解决用户模式内存溢出的问题
@@ -102,12 +106,14 @@ public abstract class XLSXCovertCSVReader {
// The last column printed to the output stream
private int lastColumnNumber = -1;
private List<Object> rowlist = new ArrayList<Object>();
private Map<Integer,Object> rowMap = new HashMap<Integer, Object>();
// Gathers characters as they are seen.
private StringBuffer value;
// private String[] record;
// private List<String[]> rows = new ArrayList<String[]>();
private boolean isCellNull = false;
private int upRowId; // 记录上一行行号
/**
* Accepts objects needed while parsing.
*
@@ -128,6 +134,7 @@ public abstract class XLSXCovertCSVReader {
this.nextDataType = xssfDataType.NUMBER;
this.formatter = new DataFormatter();
rowlist.clear();// 每次读取都清空行集合
rowMap.clear();
}
/*
@@ -197,8 +204,23 @@ public abstract class XLSXCovertCSVReader {
if (this.formatString == null)
this.formatString = BuiltinFormats
.getBuiltinFormat(this.formatIndex);
}
}
}
}else if("row".equals(name)) {
// 获取行号
String r = attributes.getValue("r");
int index = Integer.parseInt(r);
int gap = index - upRowId;
if(gap > 1) { // 存在空行
while(gap > 1) {
optRows(sheetIndex,lastColumnNumber,rowlist);
gap--;
}
}
upRowId = index;
}
lastContents = "";
}
@@ -286,7 +308,10 @@ public abstract class XLSXCovertCSVReader {
if(!refnum.equals(preRefnum)){
int len = countNullCell(refnum, preRefnum);
for(int i=0;i<len;i++){
rowlist.add(curCol, "");
rowlist.add(curCol, "");
if(!rowMap.containsKey(thisColumn)){
rowMap.put(thisColumn, "");
}
curCol++;
}
}
@@ -298,6 +323,7 @@ public abstract class XLSXCovertCSVReader {
}
// System.out.println("refnum="+refnum+"preRefnum="+preRefnum+"curCol="+curCol);
rowlist.add(curCol, thisVal);
rowMap.put(thisColumn, thisVal);
rowData.add(new IndexValue(refnum,lastContents) );
curCol++;
// record[thisColumn] = thisStr;
@@ -323,16 +349,25 @@ public abstract class XLSXCovertCSVReader {
int len = countNullCell(maxRefnum, refnum);
for(int i=0;i<=len;i++){
rowlist.add(curCol, "");
rowlist.add(curCol, "");
if(!rowMap.containsKey(thisColumn)){
rowMap.put(thisColumn, "");
}
curCol++;
}
int totalLen= countTotalCell(maxRefnum);
if(rowlist.size()<totalLen) {
List<Object> tempList=new ArrayList<>(totalLen);
for(int i=0;i<(totalLen-rowlist.size());i++) {
tempList.add("");
//修改某一个单元格为空,字段映射顺序错乱问题
for(int i=0;i<totalLen;i++) {
if(!StringUtil.isEmpty(rowMap.get(i))){
tempList.add(rowMap.get(i));
}else{
tempList.add(i,"");
}
}
tempList.addAll(rowlist);
//tempList.addAll(rowlist);
rowlist= tempList;
}
}
@@ -343,6 +378,7 @@ public abstract class XLSXCovertCSVReader {
optRows(sheetIndex,lastColumnNumber,rowlist);
rowlist.clear();
rowMap.clear();
// rows.add(record.clone());
isCellNull = false;
// for (int i = 0; i < record.length; i++) {
@@ -352,6 +388,7 @@ public abstract class XLSXCovertCSVReader {
}
rowlist.clear();
rowData.clear();
rowMap.clear();
curCol = 0;
preRefnum = null;
refnum = null;

View File

@@ -45,6 +45,7 @@ public class CheckAppFeatureComplexStringFormatThread implements Callable<String
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==3) {
@@ -57,10 +58,15 @@ public class CheckAppFeatureComplexStringFormatThread implements Callable<String
//msg=e.getMessage();
//msg.append(e.getMessage());
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
public List<AppComplexFeatureCfg> checkAppComplexFeatureCfg(StringBuffer msg,

View File

@@ -45,6 +45,7 @@ public class CheckComplexStringFormatThread implements Callable<String>{
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==3) {
@@ -57,10 +58,15 @@ public class CheckComplexStringFormatThread implements Callable<String>{
//msg=e.getMessage();
//msg.append(e.getMessage());
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
public List<ComplexkeywordCfg> checkComplexStringCfg(StringBuffer msg,
@@ -105,7 +111,8 @@ public class CheckComplexStringFormatThread implements Callable<String>{
// doLog属性检验
this.validDoLog(baseStringCfg,errInfo);
//doBlackList属性检验
this.validDoBlackList(baseStringCfg, errInfo);
if (regionDict.getRegionType().equals(3)) {
if (regionDict.getFunctionId().equals(7)) {
Long dnsStrategyId = baseStringCfg.getDnsStrategyId();
@@ -375,45 +382,46 @@ public class CheckComplexStringFormatThread implements Callable<String>{
prop.getProperty("is_case_insenstive")) + ";");
}
}
} else {
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 关键字十六进制校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
errInfo.append(
prop.getProperty("key_word") + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
}
isHex = baseStringCfg.getIsHex();
isCaseInsenstive = baseStringCfg.getIsCaseInsenstive();
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 关键字十六进制校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
errInfo.append(
prop.getProperty("key_word") + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
if (isHex != null && isCaseInsenstive != null) {
if (isHex.intValue() == 0 && isCaseInsenstive.intValue() == 0) {
baseStringCfg.setIsHexbin(0);
@@ -459,11 +467,44 @@ public class CheckComplexStringFormatThread implements Callable<String>{
}
Integer doLog = baseStringCfg.getDoLog();
if(!doLogOption.contains(doLog+"")) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
if(configDoLog.startsWith("0")) {
baseStringCfg.setDoLog(Integer.parseInt(defaultValue));
}else {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
}
}
}
}
/**
* doBlackList属性校验
* @param baseStringCfg
* @param errInfo
*/
public void validDoBlackList(ComplexkeywordCfg baseStringCfg, StringBuffer errInfo) {
if((regionDict.getFunctionId().equals(34)||regionDict.getFunctionId().equals(6)||
regionDict.getFunctionId().equals(635)||regionDict.getFunctionId().equals(8)
)&&serviceDict.getAction().equals(16)
) {
List<SysDataDictionaryItem> 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"))
+ ";");
}
}
}
}

View File

@@ -42,6 +42,7 @@ public class CheckDnsResStrategyFormatThread implements Callable<String>{
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==6) {
@@ -53,10 +54,15 @@ public class CheckDnsResStrategyFormatThread implements Callable<String>{
// TODO: handle exception
//msg=e.getMessage();
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
public List<DnsResStrategy> checkDnsResStrategyCfg(StringBuffer msg,List<?> list)

View File

@@ -27,6 +27,7 @@ import com.nis.domain.configuration.template.IpRateLimitTemplate;
//import com.nis.util.AsnCacheUtils;
import com.nis.util.Constants;
import com.nis.util.DictUtils;
import com.nis.util.StringUtil;
public class CheckIpFormatThread implements Callable<String>{
private Logger logger=Logger.getLogger(CheckIpFormatThread.class);
@@ -51,6 +52,7 @@ public class CheckIpFormatThread implements Callable<String>{
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==1) {
@@ -63,10 +65,15 @@ public class CheckIpFormatThread implements Callable<String>{
// TODO: handle exception
//msg.append(e.getMessage());
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
public List<BaseIpCfg> checkIpCfg(StringBuffer msg,List<Map<Long,AsnGroupInfo>> asnNos, List<Object> list)
@@ -122,15 +129,7 @@ public class CheckIpFormatThread implements Callable<String>{
}
// doLog属性检验
this.validDoLog(baseIpCfg,errInfo);
if(regionDict.getFunctionId().equals(200)) {
if(!serviceDict.getAction().equals(1)) {
baseIpCfg.setDoLog(0);
}
}
// doLog属性检验
this.validDoLog(baseIpCfg,errInfo);
this.validDoBlackList(baseIpCfg, errInfo);
// 特殊字段验证
// packet ip ratelimit
if (serviceDict!=null&&serviceDict.getFunctionId().intValue() == 5 && serviceDict.getAction().intValue() == 64) {
@@ -253,11 +252,7 @@ public class CheckIpFormatThread implements Callable<String>{
}
if (regionDict.getFunctionId().equals(600)) {//asn
String organization=baseIpCfg.getOrganization();
if(StringUtils.isBlank(organization)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("organization","Organization"))
+ ";");
}else {
if(!StringUtils.isBlank(organization)) {
if(organization.length() > 1024){
errInfo.append(prop.getProperty("asn_name")+prop.getProperty("length_error")+" "+String.format(prop.getProperty("max_length")+":1024") + ";");
}else {
@@ -266,14 +261,9 @@ public class CheckIpFormatThread implements Callable<String>{
}
baseIpCfg.setOrganization(organization.trim().toUpperCase());
}
}
String country=baseIpCfg.getCountry();
if(StringUtils.isBlank(country)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("country"))
+ ";");
}else {
if(!StringUtils.isBlank(country)) {
if(country.length() > 512){
errInfo.append(prop.getProperty("country_code")+prop.getProperty("length_error")+" "+String.format(prop.getProperty("max_length")+":512") + ";");
}else {
@@ -281,11 +271,7 @@ public class CheckIpFormatThread implements Callable<String>{
}
}
String detail=baseIpCfg.getDetail();
if(StringUtils.isBlank(detail)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("detail"))
+ ";");
}else {
if(!StringUtils.isBlank(detail)) {
if(detail.length() > 1024||detail.length()<4){
errInfo.append(prop.getProperty("details")+prop.getProperty("length_error")+" "+String.format(prop.getProperty("min_length")+":4,"+prop.getProperty("max_length")+":1024") + ";");
}else {
@@ -297,7 +283,7 @@ public class CheckIpFormatThread implements Callable<String>{
if(StringUtils.isBlank(userRegion1)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("asn_no"))
+ ";");
+ ";org:"+baseIpCfg.getOrganization()+ ";asn:"+baseIpCfg.getOrganization()+ ";ip:"+baseIpCfg.getDestIpAddress());
}else {
try {
Long asnNo=Long.parseLong(userRegion1);
@@ -306,17 +292,21 @@ public class CheckIpFormatThread implements Callable<String>{
String.format(prop.getProperty("must_between"),"1","4294967295" )
+ ";");
}else {
if(StringUtil.isEmpty(baseIpCfg.getOrganization())){
baseIpCfg.setOrganization(asnNo.toString());
baseIpCfg.setCfgDesc(asnNo.toString());
}
// ConfigGroupInfo configGroupInfo=asnIpCfgService.getConfigGroupInfoByAsnNo(asnNo);
if(asnNos!=null) {
AsnGroupInfo configGroupInfo=asnGroupInfos==null?null:asnGroupInfos.get(asnNo);//从缓存中取
//缓存中没有
if(configGroupInfo==null) {
synchronized (Constants.IMPORT_LOCK) {
if(StringUtils.isNotBlank(baseIpCfg.getOrganization())&&StringUtils.isNotBlank(baseIpCfg.getCountry())) {
if(StringUtils.isNotBlank(baseIpCfg.getOrganization())) {
AsnGroupInfo groupInfo=new AsnGroupInfo();
groupInfo.setOrganization(baseIpCfg.getOrganization().trim().toUpperCase());
groupInfo.setCountry(baseIpCfg.getCountry().trim().toUpperCase());
groupInfo.setDetail(baseIpCfg.getDetail().trim());
groupInfo.setCountry(StringUtil.isEmpty(baseIpCfg.getCountry()) ? "":baseIpCfg.getCountry().trim().toUpperCase());
groupInfo.setDetail(StringUtil.isEmpty(baseIpCfg.getDetail()) ? "":baseIpCfg.getDetail().trim());
groupInfo.setIsValid(0);
groupInfo.setAsnId(asnNo);
if(asnNos.get(0).containsKey(asnNo)) {
@@ -347,12 +337,8 @@ public class CheckIpFormatThread implements Callable<String>{
if(!configGroupInfo.getOrganization().equalsIgnoreCase(baseIpCfg.getOrganization().trim())) {
errInfo.append(prop.getProperty("organization","Organization")+" "+prop.getProperty("mismatch","Mismatch"));
}
if(!configGroupInfo.getCountry().equalsIgnoreCase(baseIpCfg.getCountry().trim())) {
errInfo.append(prop.getProperty("country","Country")+" "+prop.getProperty("mismatch","Mismatch"));
}
if(!configGroupInfo.getDetail().equalsIgnoreCase(baseIpCfg.getDetail().trim())) {
errInfo.append(prop.getProperty("detail","Detail")+" "+prop.getProperty("mismatch","Mismatch"));
}
configGroupInfo.setDetail(baseIpCfg.getDetail());
configGroupInfo.setCountry(baseIpCfg.getCountry());
if(StringUtils.isBlank(errInfo.toString())) {
asnNos.get(1).put(asnNo,configGroupInfo);
}
@@ -1236,14 +1222,45 @@ public class CheckIpFormatThread implements Callable<String>{
}
Integer doLog = baseIpCfg.getDoLog();
if(!doLogOption.contains(doLog+"")) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
if(configDoLog.startsWith("0")) {
baseIpCfg.setDoLog(Integer.parseInt(defaultValue));
}else {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
}
}
}
}
/**
* doBlackList属性校验
* @param baseStringCfg
* @param errInfo
*/
public void validDoBlackList(IpPortCfg baseIpCfg, StringBuffer errInfo) {
if((regionDict.getFunctionId().equals(34)||regionDict.getFunctionId().equals(8)
||regionDict.getFunctionId().equals(51)||regionDict.getFunctionId().equals(510))&&serviceDict.getAction().equals(16)) {
List<SysDataDictionaryItem> 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
*

View File

@@ -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;
@@ -44,6 +43,7 @@ public class CheckStringFormatThread implements Callable<String>{
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==2) {
@@ -55,10 +55,15 @@ public class CheckStringFormatThread implements Callable<String>{
// TODO: handle exception
//msg=e.getMessage();
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
@@ -84,7 +89,7 @@ public class CheckStringFormatThread implements Callable<String>{
}
StringBuffer errTip = new StringBuffer();
Pattern pattern = Pattern.compile("\t|\r|\n|\b|\f");
Pattern domainPattern = Pattern.compile(Constants.DOMAIN_REGEXP);
Pattern domainPattern = Pattern.compile("^[a-zA-Z0-9.-]*$");
for (int i = 0; i < list.size(); i++) {
StringBuffer errInfo = new StringBuffer();
BaseStringCfg baseStringCfg = new BaseStringCfg();
@@ -105,7 +110,8 @@ public class CheckStringFormatThread implements Callable<String>{
}
// 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();
@@ -431,45 +437,50 @@ public class CheckStringFormatThread implements Callable<String>{
prop.getProperty("is_case_insenstive")) + ";");
}
}
} else {
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 十六进制 关键字校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
errInfo.append(
prop.getProperty("key_word") + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
}
isHex = baseStringCfg.getIsHex();
isCaseInsenstive = baseStringCfg.getIsCaseInsenstive();
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 十六进制 关键字校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
String message = prop.getProperty("key_word");
if(regionDict.getFunctionId().equals(403) || regionDict.getFunctionId().equals(200)) {
message = prop.getProperty("domain_name");
}
errInfo.append(
message + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
if (isHex != null && isCaseInsenstive != null) {
if (isHex.intValue() == 0 && isCaseInsenstive.intValue() == 0) {
baseStringCfg.setIsHexbin(0);
@@ -507,7 +518,6 @@ public class CheckStringFormatThread implements Callable<String>{
* @param errInfo
*/
public void validDoLog(BaseStringCfg baseStringCfg, StringBuffer errInfo) {
String configDoLog = serviceDict.getConfigDoLog();
if(StringUtils.isNotBlank(configDoLog)) {
String defaultValue = configDoLog.substring(configDoLog.lastIndexOf(";")+1);
@@ -517,11 +527,45 @@ public class CheckStringFormatThread implements Callable<String>{
}
Integer doLog = baseStringCfg.getDoLog();
if(!doLogOption.contains(doLog+"")) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
if(configDoLog.startsWith("0")) {
baseStringCfg.setDoLog(Integer.parseInt(defaultValue));
}else {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("do_log"))
+ ";");
}
}
}
}
/**
* doBlackList属性校验
* @param baseStringCfg
* @param errInfo
*/
public void validDoBlackList(BaseStringCfg baseStringCfg, StringBuffer errInfo) {
if((regionDict.getFunctionId().equals(34)||regionDict.getFunctionId().equals(6)||
regionDict.getFunctionId().equals(635)||regionDict.getFunctionId().equals(8)
||regionDict.getFunctionId().equals(51)||regionDict.getFunctionId().equals(510))
&&serviceDict.getAction().equals(16)) {
List<SysDataDictionaryItem> 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"))
+ ";");
}
}
}
}

View File

@@ -3,12 +3,14 @@ package com.nis.util.excel.thread;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.jets3t.service.ServiceException;
@@ -20,6 +22,7 @@ import com.nis.domain.FunctionServiceDict;
import com.nis.domain.configuration.AppTopicDomainCfg;
import com.nis.domain.configuration.WebsiteDomainTopic;
import com.nis.util.Constants;
import com.nis.util.DictUtils;
import com.nis.web.security.UserUtils;
import com.nis.web.service.SpringContextHolder;
import com.nis.web.service.configuration.AppCfgService;
@@ -44,6 +47,7 @@ public class CheckTopicWebsiteFormatThread implements Callable<String>{
public String call() throws Exception {
List<Object> dataList=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
StringBuffer msg=new StringBuffer();
boolean error = false;
while(!srcQueue.isEmpty()) {
int size=srcQueue.drainTo(dataList,Constants.MAAT_JSON_SEND_SIZE);
if(regionDict.getRegionType().intValue()==2) {
@@ -55,10 +59,15 @@ public class CheckTopicWebsiteFormatThread implements Callable<String>{
// TODO: handle exception
//msg=e.getMessage();
//break;
error = true;
}
}
dataList.clear();
}
if(error) {
msg.append("validate_error");
}
return msg.toString();
}
@@ -84,7 +93,7 @@ public class CheckTopicWebsiteFormatThread implements Callable<String>{
}
StringBuffer errTip = new StringBuffer();
Pattern pattern = Pattern.compile("\t|\r|\n|\b|\f");
Pattern domainPattern = Pattern.compile(Constants.DOMAIN_REGEXP);
Pattern domainPattern = Pattern.compile("^[a-zA-Z0-9.-]*$");
for (int i = 0; i < list.size(); i++) {
StringBuffer errInfo = new StringBuffer();
AppTopicDomainCfg baseStringCfg = new AppTopicDomainCfg();
@@ -99,16 +108,36 @@ public class CheckTopicWebsiteFormatThread implements Callable<String>{
}
if (regionDict.getRegionType().equals(2)) {
// 主题、网站
Long topicId = baseStringCfg.getTopicId();
Long websiteServiceId = baseStringCfg.getWebsiteServiceId();
if (topicId == null) {
errInfo.append(prop.getProperty("topic") +" "+ prop.getProperty("not_exist") + ";");
// 主题、网站验
String topic = baseStringCfg.getTopic();
String websiteService = baseStringCfg.getWebsiteService();
if(StringUtils.isBlank(topic)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("topic") + " ") + ";");
}else {
Map<String, String> dictMap = DictUtils.getDictOptionInReversion("TOPIC");
CaseInsensitiveMap topicDictMap = new CaseInsensitiveMap(dictMap);
String topicDictCode = (String)topicDictMap.get(topic);
if(StringUtils.isBlank(topicDictCode)) {
errInfo.append(prop.getProperty("topic") +" "+ prop.getProperty("not_exist") + ";");
}else {
baseStringCfg.setTopicId(Long.parseLong(topicDictCode));
}
}
if (websiteServiceId == null) {
errInfo.append(prop.getProperty("website_server") +" "+ prop.getProperty("not_exist") + ";");
if(StringUtils.isBlank(websiteService)) {
errInfo.append(
String.format(prop.getProperty("can_not_null"), prop.getProperty("website_server") + " ") + ";");
}else {
Map<String, String> dictMap = DictUtils.getDictOptionInReversion("WEBSITE_SERVER");
CaseInsensitiveMap websiteDictMap = new CaseInsensitiveMap(dictMap);
String websiteServiceDictCode = (String)websiteDictMap.get(websiteService);
if(StringUtils.isBlank(websiteServiceDictCode)) {
errInfo.append(prop.getProperty("website_server") +" "+ prop.getProperty("not_exist") + ";");
}else {
baseStringCfg.setWebsiteServiceId(Long.parseLong(websiteServiceDictCode));
}
}
String keyword = baseStringCfg.getCfgKeywords();
@@ -225,45 +254,46 @@ public class CheckTopicWebsiteFormatThread implements Callable<String>{
prop.getProperty("is_case_insenstive")) + ";");
}
}
} else {
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 十六进制 关键字校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
errInfo.append(
prop.getProperty("key_word") + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
}
isHex = baseStringCfg.getIsHex();
isCaseInsenstive = baseStringCfg.getIsCaseInsenstive();
if (isHex.intValue() != 0 && isHex.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (isCaseInsenstive.intValue() != 0 && isCaseInsenstive.intValue() != 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.indexOf("1") == -1 && isHex.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.equals("1") && isHex.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_hex")) + ";");
}
if (hexP.indexOf("2") == -1 && isCaseInsenstive.intValue() == 1) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
if (hexP.equals("2") && isCaseInsenstive.intValue() == 0) {
errInfo.append(
String.format(prop.getProperty("is_incorrect"), prop.getProperty("is_case_insenstive"))
+ ";");
}
// 十六进制 关键字校验
if (hexP.indexOf("1") != -1 && isHex.intValue() == 1) {
boolean bl = Pattern.compile("^([0-9|a-f|A-F]*)$").matcher(keyword).matches();
if(!bl) {
errInfo.append(
prop.getProperty("domain_name") + " '" + keyword + "' "+String.format(prop.getProperty("contains_non_hex_char")) + ";");
}
}
if (isHex != null && isCaseInsenstive != null) {
if (isHex.intValue() == 0 && isCaseInsenstive.intValue() == 0) {
baseStringCfg.setIsHexbin(0);

View File

@@ -44,7 +44,7 @@ public class DeleteAsnIpTread implements Callable<Throwable> {
while(!asnNos.isEmpty()) {
asnNos.drainTo(asnNoList,5);
for(Long asnNo:asnNoList) {
AsnGroupInfo configGroupInfo=null;//AsnCacheUtils.get(asnNo);
AsnGroupInfo configGroupInfo=AsnCacheUtils.get(asnNo);
if(configGroupInfo==null) {
configGroupInfo=new AsnGroupInfo();
configGroupInfo.setAsnId(asnNo);
@@ -85,7 +85,7 @@ public class DeleteAsnIpTread implements Callable<Throwable> {
}
sb.deleteCharAt(sb.toString().lastIndexOf(","));
asnIpCfgDao.delete(sb.toString());
new AsnIpCfgService().asnIPRegionSendToMaat(listPage, Constants.VALID_NO,1);
new AsnIpCfgService().asnIPRegionSendToMaat(listPage, Constants.VALID_NO);
transactionManager.commit(status);
listPage.clear();
} catch (Throwable e) {

View File

@@ -112,7 +112,7 @@ public class SaveAsnIpThread implements Callable<Throwable>{
_cfg.setAsnIpGroup(asnNoMaps.get(1).get(Long.parseLong(_cfg.getUserRegion1())));
}else {
// ConfigGroupInfo info=asnIpCfgService.getConfigGroupInfoByAsnNo(Long.parseLong(_cfg.getUserRegion1()));
AsnGroupInfo info=null;//AsnCacheUtils.get(Long.parseLong(_cfg.getUserRegion1()));
AsnGroupInfo info=AsnCacheUtils.get(Long.parseLong(_cfg.getUserRegion1()));
if(info==null) {
info=new AsnGroupInfo();
info.setAsnId(Long.parseLong(_cfg.getUserRegion1()));
@@ -166,7 +166,7 @@ public class SaveAsnIpThread implements Callable<Throwable>{
this.save(cfgs);
// splitAndSend(toAddRegionAsnIpCfgs,Constants.VALID_YES);
if(toAddRegionAsnIpCfgs.size()>0) {
new AsnIpCfgService().asnIPRegionSendToMaat(toAddRegionAsnIpCfgs,Constants.VALID_YES,1);
new AsnIpCfgService().asnIPRegionSendToMaat(toAddRegionAsnIpCfgs,Constants.VALID_YES);
}
cfgs.clear();
toAddRegionAsnIpCfgs.clear();

View File

@@ -0,0 +1,69 @@
package com.nis.util.redis;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.apache.log4j.Logger;
import com.nis.util.Configurations;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisPoolHelper {
private Logger logger=Logger.getLogger(RedisPoolHelper.class);
private JedisPool jedisPool;
private String host;
private int timeout;
public RedisPoolHelper(){
init();
}
private void init() {
synchronized (this) {
if (jedisPool == null) {
host=Configurations.getStringProperty("redis.host", "127.0.0.1:6379");
timeout=Configurations.getIntProperty("redis.timeout", 10000);
String[] hostAndPort = host.split(":");
jedisPool = new JedisPool(getPoolConfig(), hostAndPort[0], Integer.parseInt(hostAndPort[1]), timeout);
logger.info("redis pool init complate! host-->"+hostAndPort[0]+" port:"+Integer.parseInt(hostAndPort[1]));
}
}
}
public Jedis getJedis() {
if (jedisPool == null) {
init();
}
return jedisPool.getResource();
}
public JedisPool getJedisPool() {
return jedisPool;
}
public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
/**
*
* getPoolConfig(初始化连接池的配置,这里可以设置很多参数的,不过目前没加)
* (这里描述这个方法适用条件 可选)
* @return
*GenericObjectPoolConfig
* @exception
* @since 1.0.0
*/
private GenericObjectPoolConfig getPoolConfig(){
GenericObjectPoolConfig config=new GenericObjectPoolConfig();
config.setMaxTotal(Configurations.getIntProperty("redis.pool.maxtotal", 500));//整个池的最大值
config.setMaxIdle(Configurations.getIntProperty("redis.pool.maxidle", 100));//最大空闲
config.setMaxWaitMillis(Configurations.getIntProperty("redis.pool.maxwaitmillis", -1));//获取不到永远等待
config.setBlockWhenExhausted(Configurations.getBooleanProperty("redis.pool.blockwhenexhausted", true));
config.setNumTestsPerEvictionRun(Configurations.getIntProperty("redis.pool.numtestsperevictionrun", Integer.MAX_VALUE));//always test all idle object
config.setTestOnBorrow(Configurations.getBooleanProperty("redis.pool.testonborrow", true));
config.setTestOnReturn(Configurations.getBooleanProperty("redis.pool.testonreturn", false));
config.setTestWhileIdle(Configurations.getBooleanProperty("redis.pool.testwhileidle", true));//发呆过长时间是否先test一下
config.setTimeBetweenEvictionRunsMillis(Configurations.getLongProperty("redis.pool.timebetweenevictionrunsmillis", 60000L));//-1不启动默认1min一次
config.setMinEvictableIdleTimeMillis(Configurations.getLongProperty("redis.pool.minevictableidletimemillis", 60000L));//可发呆的时间10mins
return config;
}
}

View File

@@ -0,0 +1,38 @@
package com.nis.util.redis;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class SaveHelpInfoThread extends Thread {
private Logger logger=Logger.getLogger(SaveHelpInfoThread.class);
private JedisPool jedisPool;
private Jedis jedis;
private String key;
private String value;
private int expire;
public SaveHelpInfoThread(JedisPool jedisPool,String key,String value,int expire){
this.jedisPool=jedisPool;
this.key=key;
this.value=value;
this.expire=expire;
jedis=jedisPool.getResource();
}
@Override
public void run() {
try {
jedis.set(key, value);
if(expire!=-1){
jedis.expire(key, expire);
}
logger.debug("cache help[key --> "+key+"]");
} catch (Exception e) {
logger.error("save redis error",e);
}finally{
jedis.close();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,31 @@
package com.nis.web.controller;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nis.domain.SysMenu;
import com.nis.domain.configuration.HelpInfo;
import com.nis.util.StringUtil;
import com.nis.util.StringUtils;
import com.nis.web.security.UserUtils;
import com.nis.web.service.configuration.HelpInfoService;
@Controller
@RequestMapping("${adminPath}/sys/")
public class SystemController extends BaseController{
@Autowired
private HelpInfoService helpService;
@RequestMapping("index")
public String index(HttpServletRequest request, HttpServletResponse response,ModelMap model){
return "/sys/sysIndex";
@@ -91,6 +99,9 @@ public class SystemController extends BaseController{
System.out.println(menu.getParentIds());
newList.add(menu);
}*/
//将帮助文档缓存到redis
helpService.cacheAllHelpInfo();
}
} catch (Exception e) {
@@ -100,6 +111,91 @@ public class SystemController extends BaseController{
model.addAttribute("menuList",newList);
return "/help";
}
/**
* @param request
* @param response
* @param model
* @param editedHelpInfo 修改之后的帮助文档内容
* @param helpHrefVal 文档的路径
* @return
*/
@RequestMapping("saveHelp")
@ResponseBody
public boolean saveHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="editedHelpInfo")String editedHelpInfo,@RequestParam(required=true,value="helpHrefVal")String helpHrefVal){
if(StringUtils.strIsBlank(helpHrefVal)){
return false;
}
try {
StringBuffer helpInfoText=new StringBuffer(); //修改之后的内容
helpInfoText.append(URLDecoder.decode(editedHelpInfo,"utf-8"));
String helpHref=URLDecoder.decode(helpHrefVal,"utf-8");
String[] split = StringUtils.split(helpHref, "/");
if(split!=null&&split.length>0){
HelpInfo helpInfo = new HelpInfo();
helpInfo.setFileComment(helpInfoText.toString());
helpInfo.setFileName(split[split.length-1]);
helpService.saveHelpInfo(helpInfo);
return true;
}
} catch (Exception e) {
logger.error("save helpInfo error",e);
}
return false;
}
/**
* 查看帮助文档内容
* @param request
* @param response
* @param model
* @param helpHref
* @return
*/
@RequestMapping("viewHelp")
@ResponseBody
public HelpInfo viewHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="helpHref")String helpHref){
if(StringUtils.strIsBlank(helpHref)){
return null;
}
try {
helpHref=URLDecoder.decode(helpHref,"utf-8");
String[] split = StringUtils.split(helpHref, "/");
if(split!=null&&split.length>0){
HelpInfo helpInfo = helpService.findHelpCommentByName(split[split.length-1]);
return helpInfo;
}
} catch (Exception e) {
logger.error("view helpInfo error",e);
}
return null;
}
/**
* 查看帮助文档备份内容
* @param request
* @param response
* @param model
* @param helpHref
* @return
*/
@RequestMapping("viewBakHelp")
@ResponseBody
public HelpInfo viewBakHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="helpHref")String helpHref){
if(StringUtils.strIsBlank(helpHref)){
return null;
}
try {
helpHref=URLDecoder.decode(helpHref,"utf-8");
String[] split = StringUtils.split(helpHref, "/");
if(split!=null&&split.length>0){
HelpInfo helpInfo = helpService.findHelpBakCommentByName(split[split.length-1]);
return helpInfo;
}
} catch (Exception e) {
logger.error("view helpBakInfo error",e);
}
return null;
}
}

View File

@@ -1,10 +1,5 @@
package com.nis.web.controller.basics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
@@ -102,8 +97,6 @@ public class AsnGroupController extends BaseController {
public String delete(RedirectAttributes redirectAttributes,String ids,String asnIds) {
try {
asnGroupInfoService.delete(ids,asnIds);
//TODO 查询本次删除的所有asnOrg组中是否存在asn 没有is_used=0的asn如果存在则需要将整个组删除
addMessage(redirectAttributes,"success","delete_success");
} catch (Exception e) {
logger.error("删除失败",e);
@@ -162,14 +155,11 @@ public class AsnGroupController extends BaseController {
*/
@ResponseBody
@RequestMapping(value = {"/checkAsnNo"})
public boolean checkIp(AsnGroupInfo cfg, HttpServletRequest request, HttpServletResponse response){
public AsnGroupInfo checkIp(AsnGroupInfo cfg, HttpServletRequest request, HttpServletResponse response){
AsnGroupInfo policyGroup = asnGroupInfoService.getInfoByAsnNo(cfg);
if(policyGroup == null){
return true;
}
return false;
return policyGroup;
}
/**
* 校验asn号是否已存在
@@ -185,38 +175,5 @@ public class AsnGroupController extends BaseController {
return true;
}
/**
* 异步获取ASN组织信息
* @param model
* @return
*/
@RequestMapping(value="ajaxGetAsnOrg")
@ResponseBody
public List ajaxGetAsnOrg( ConfigGroupInfo orgGroup,Model model){
List<ConfigGroupInfo> orgaList=new ArrayList<>();
try {
orgaList=configGroupInfoService.findAllList(orgGroup);
} catch (Exception e) {
logger.error("异步获取ASN组织信息失败",e);
return orgaList;
}
return orgaList;
}
/**
* 异步获取ASN组织信息
* @param model
* @return
*/
@RequestMapping(value="ajaxGetAsnNo")
@ResponseBody
public List ajaxGetAsnNo(AsnGroupInfo asnGroup,Model model){
List<AsnGroupInfo> orgaList=new ArrayList<>();
try {
orgaList=asnGroupInfoService.findAsnGroupList(asnGroup);
} catch (Exception e) {
logger.error("异步获取ASN NO信息失败",e);
return orgaList;
}
return orgaList;
}
}

View File

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
@@ -134,24 +135,11 @@ public class AsnIpController extends BaseController{
asnIpMap.put(Long.parseLong(asnIpCfg.getUserRegion1()), _asnIps);
}
}
/********************每次下发一个组的region保证事物********************/
for (Long asnId : asnIpMap.keySet()) {
try {
asnIpCfgService.auditIpBatch(asnIpMap.get(asnId),asnId,isValid);
} catch (Exception e) {
logger.error("配置下发失败:",e);
if(e instanceof MaatConvertException) {
addMessage(redirectAttributes,"error", "request_service_failed");
}else {
addMessage(redirectAttributes,"error", "audit_failed");
}
}
}
}/*else {
asnIpCfgService.auditIpBatch(asnIpMap,isValid);
}else {
//条件下所有配置审核
Page<AsnIpCfg> searchPage=new Page<AsnIpCfg>(request,response,"a");
Page<AsnIpCfg> auditPage=new Page<AsnIpCfg>(request,response,"a");
Page<AsnIpCfg> searchPage=new Page<AsnIpCfg>(request,response,"r");
Page<AsnIpCfg> auditPage=new Page<AsnIpCfg>(request,response,"r");
BeanUtils.copyProperties(searchPage, auditPage);
try {
auditAll(auditPage,isValid , cfg);
@@ -167,7 +155,7 @@ public class AsnIpController extends BaseController{
}
return list(model, request, response, cfg);
}*/
}
return "redirect:" + adminPath +"/basics/asn/list?functionId="+cfg.getFunctionId();
}
@RequestMapping(value = {"/delete"})

View File

@@ -24,6 +24,7 @@ import com.google.common.collect.Maps;
import com.nis.domain.Page;
import com.nis.domain.SysUser;
import com.nis.domain.basics.ServiceDictInfo;
import com.nis.domain.configuration.UserManage;
import com.nis.util.ConfigDictUtils;
import com.nis.util.Configurations;
import com.nis.util.Constants;
@@ -232,8 +233,36 @@ public class ServiceDictInfoController extends BaseController {
@RequestMapping(value={"delete"})
public String delete(ServiceDictInfo serviceDictInfo, RedirectAttributes redirectAttributes, String itType, String mulitId) {
try {
serviceDictInfoService.deleteDict(mulitId);
addMessage(redirectAttributes,"success", "delete_success");
String exIp="";
String id="";
Properties msgProp = getMsgProp();
if(itType.equals("5")){
String [] ids=mulitId.split(",");
for (int i = 0; i < ids.length; i++) {
ServiceDictInfo dict= serviceDictInfoService.getDictById(Integer.valueOf(ids[i]));
if(dict!=null){
UserManage user =new UserManage();
user.setServerIp(dict.getItemValue()+",");
List<UserManage> list=userManageService.findList(user);
if(list!=null && list.size()>0){
exIp+=dict.getItemValue()+"";
}else{
id+=ids[i]+",";
}
}
}
}else{
id=mulitId;
}
if(!StringUtil.isEmpty(id)){
serviceDictInfoService.deleteDict(id);
}
if(!StringUtil.isEmpty(exIp)){
exIp=exIp.substring(0, exIp.length()-1);
addMessage(redirectAttributes,"error", "IP "+exIp+" "+msgProp.getProperty("user_check"));
}else{
addMessage(redirectAttributes,"success", "delete_success");
}
} catch (Exception e) {
e.printStackTrace();
addMessage(redirectAttributes,"error", "delete_failed");
@@ -593,4 +622,17 @@ public class ServiceDictInfoController extends BaseController {
return dicName;
}
@ResponseBody
@RequestMapping(value = "ajaxIpRepeat")
public boolean ajaxIpRepeat(String oldIp, String ip,Integer type) {
if (ip !=null && ip.equals(oldIp)) {
return true;
} else if (ip !=null && serviceDictInfoService.getByItemValue(ip,type) == null) {
return true;
}
return false;
}
}

View File

@@ -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;
@@ -1859,7 +1869,12 @@ public class AppCfgController extends BaseController {
for (int i = 0; i < ipLists.size(); i++) {
AppTopicDomainCfg appTop = ipLists.get(i);
appTop.setIsHex(appTop.getIsHexbin());
appTop.setIsCaseInsenstive(appTop.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(appTop.getIsHexbin()==2){
appTop.setIsCaseInsenstive(1);
}else{
appTop.setIsCaseInsenstive(0);
}
}
titleList.add(entity.getMenuNameCode());
classMap.put(entity.getMenuNameCode(), AppTopicDomainCfg.class);
@@ -1990,7 +2005,12 @@ public class AppCfgController extends BaseController {
for (AppHttpCfg http : ipLists) {
http.setIsHex(http.getIsHexbin());
http.setIsCaseInsenstive(http.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(http.getIsHexbin()==2){
http.setIsCaseInsenstive(1);
}else{
http.setIsCaseInsenstive(0);
}
http.setCfgKeywords(Functions.replace(http.getCfgKeywords(), "***and***", " "));
SpecificServiceCfg app = specificServiceCfgService.getBySpecServiceId(http.getSpecServiceId());
http.setAppName(app.getSpecServiceName());
@@ -2058,7 +2078,12 @@ public class AppCfgController extends BaseController {
}
for (AppDomainCfg domain : ipLists) {
domain.setIsHex(domain.getIsHexbin());
domain.setIsCaseInsenstive(domain.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(domain.getIsHexbin()==2){
domain.setIsCaseInsenstive(1);
}else{
domain.setIsCaseInsenstive(0);
}
SpecificServiceCfg app = specificServiceCfgService.getBySpecServiceId(domain.getSpecServiceId());
domain.setAppName(app.getSpecServiceName());
}
@@ -2126,7 +2151,12 @@ public class AppCfgController extends BaseController {
for (AppSslCertCfg ssl : ipLists) {
ssl.setIsHex(ssl.getIsHexbin());
ssl.setIsCaseInsenstive(ssl.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(ssl.getIsHexbin()==2){
ssl.setIsCaseInsenstive(1);
}else{
ssl.setIsCaseInsenstive(0);
}
ssl.setCfgKeywords(Functions.replace(ssl.getCfgKeywords(), "***and***", " "));
SpecificServiceCfg app = specificServiceCfgService.getBySpecServiceId(ssl.getSpecServiceId());
ssl.setAppName(app.getSpecServiceName());
@@ -2169,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);
}
}

View File

@@ -424,7 +424,12 @@ public class AppFeatureCfgController extends BaseController {
for (int i = 0; i < list.size(); i++) {
AppComplexFeatureCfg base = (AppComplexFeatureCfg) list.get(i);
base.setIsHex(base.getIsHexbin());
base.setIsCaseInsenstive(base.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(base.getIsHexbin()==2){
base.setIsCaseInsenstive(1);
}else{
base.setIsCaseInsenstive(0);
}
base.setCfgKeywords(Functions.replace(base.getCfgKeywords(), "***and***", " "));
}
return list;
@@ -434,7 +439,12 @@ public class AppFeatureCfgController extends BaseController {
for (int i = 0; i < list.size(); i++) {
AppStringFeatureCfg base = (AppStringFeatureCfg) list.get(i);
base.setIsHex(base.getIsHexbin());
base.setIsCaseInsenstive(base.getIsHexbin());
// '默认为0:大小写不敏感且非HEX;1:HEX格式二进制;2:大小写敏感且非HEX',
if(base.getIsHexbin()==2){
base.setIsCaseInsenstive(1);
}else{
base.setIsCaseInsenstive(0);
}
base.setCfgKeywords(Functions.replace(base.getCfgKeywords(), "***and***", " "));
}
return list;

View File

@@ -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);
}
}

View File

@@ -51,10 +51,11 @@ public class ConfigSynchronizationController extends BaseController {
* 下发同步命令
*/
@RequestMapping(value = {"configSync"})
public String configSync(Model model,Integer cmd,HttpServletRequest request,HttpServletResponse response){
public String configSync(Model model,Integer cmd,Integer serviceId,HttpServletRequest request,HttpServletResponse response){
Map<String,Integer> map = new HashMap();
map.put("syncStatus", cmd);
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));
//JSONObject result=JSONObject.fromObject("{\"status\": 201,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":0,\"opTime\":\"2016-11-22 08:31:27\"}]}");
if(result.get("status").equals(201)){//响应成功
if(cmd.equals(1)){//同步
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
@@ -73,11 +74,12 @@ public class ConfigSynchronizationController extends BaseController {
CacheUtils.remove(Constants.CACHE_DICT_MAP);
}
}
send(model,request,response);
send(serviceId,model,request,response);
}else if(cmd.equals(0)){//取消
}
}
model.addAttribute("serviceId", serviceId);
return "/sys/configSyncInfo";
}
@@ -85,10 +87,10 @@ public class ConfigSynchronizationController extends BaseController {
* 下发同步配置
*/
@RequestMapping(value = {"send"})
public void send(Model model,HttpServletRequest request,HttpServletResponse response){
public void send(Integer serviceId,Model model,HttpServletRequest request,HttpServletResponse response){
int status = -2;
try {
configSynchronizationService.send(request,response,null);
configSynchronizationService.send(serviceId,request,response,null);
status = 1;
} catch (NoSuchFieldException e) {
e.printStackTrace();
@@ -129,6 +131,7 @@ public class ConfigSynchronizationController extends BaseController {
boolean isFinished = true;
while(isFinished){
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
//JSONObject result = JSONObject.fromObject("{\"status\": 200,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":3,\"opTime\":\"2016-11-22 08:31:27\"}]}");
if(result.get("status").equals(200)){
List<Map<String,Object>> list = result.getJSONArray("data");
if(!StringUtil.isEmpty(list)){
@@ -180,6 +183,7 @@ public class ConfigSynchronizationController extends BaseController {
String failStatus = DictUtils.getDictCode("config_sync_status", "fail","-2");
Map<String,Object> map = Maps.newHashMap();
if(!currentStatus.equals(successStatus) && !currentStatus.equals(failStatus) && !currentStatus.equals(serverFailStatus)){
//JSONObject result = JSONObject.fromObject("{\"status\": 200,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":0,\"opTime\":\"2016-11-22 08:31:27\"}]}");
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
if(result.get("status").equals(200)){
List<Map<String,Object>> list = result.getJSONArray("data");

View File

@@ -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);
}
}

View File

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.eclipse.jetty.util.ajax.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
@@ -23,10 +24,8 @@ import com.google.common.collect.Maps;
import com.nis.domain.Page;
import com.nis.domain.basics.IpReuseIpCfg;
import com.nis.domain.basics.ServiceDictInfo;
import com.nis.domain.configuration.BaseCfg;
import com.nis.domain.configuration.BaseStringCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.IpReuseDnatPolicyCfg;
import com.nis.domain.configuration.IpReusePolicyCfg;
import com.nis.domain.configuration.UserManage;
import com.nis.exceptions.MaatConvertException;
import com.nis.util.Constants;
@@ -34,10 +33,14 @@ import com.nis.util.DateUtils;
import com.nis.util.StringUtil;
import com.nis.util.StringUtils;
import com.nis.web.controller.BaseController;
import com.nis.web.service.configuration.IpMultiplexService;
@Controller
@RequestMapping("${adminPath}/maintenance/userManage")
public class UserManageController extends BaseController{
@Autowired
private IpMultiplexService ipMultiplexService;
@RequestMapping(value = {"/list"})
@RequiresPermissions(value={"user:manage:view"})
@@ -69,13 +72,30 @@ public class UserManageController extends BaseController{
public String delete(Integer isValid
,String ids
,RedirectAttributes redirectAttributes,HttpServletRequest request){
String deleteSuccessIp="";
String message="";
Properties msgProp = getMsgProp();
String exUser="";
try{
for (String id : ids.split(",")) {
UserManage user=userManageService.getUserById(id);
if(user != null && !StringUtil.isEmpty(user.getServerIp())) {
//判断用户是否存在snat、dnat复用策略中
boolean flag=true;
if(user!=null && !StringUtil.isEmpty(user.getUserName())){
//snat
List<IpReusePolicyCfg> snatList=ipMultiplexService.findByUser(user.getUserName());
if(snatList!=null && snatList.size()>0){
exUser+=user.getUserName()+"";
flag=false;
}else{
//dnat
List<IpReuseDnatPolicyCfg> dnatList=ipMultiplexService.findDnatUser(user.getUserName());
if(dnatList!=null && dnatList.size()>0){
exUser+=user.getUserName()+"";
flag=false;
}
}
}
if(user != null && !StringUtil.isEmpty(user.getServerIp()) && flag) {
boolean lastIp=false;
int deleteIpLenth=1;
String serverIp=user.getServerIp().substring(0, user.getServerIp().length()-1);
@@ -99,11 +119,21 @@ public class UserManageController extends BaseController{
}
}
}
addMessage(redirectAttributes,"success","delete_success");
if(!StringUtil.isEmpty(exUser)){
exUser=exUser.substring(0, exUser.length()-1);
addMessage(redirectAttributes,"error", msgProp.getProperty("user")+" "+exUser+" "+msgProp.getProperty("user_check"));
}else{
addMessage(redirectAttributes,"success","delete_success");
}
}catch(Exception e){
logger.error("Delete failed",e);
if(e instanceof MaatConvertException) {
addMessage(redirectAttributes,"error",message);
if(!StringUtil.isEmpty(exUser)){
exUser=exUser.substring(0, exUser.length()-1);
message+="<br/> "+msgProp.getProperty("user")+" "+exUser+" "+msgProp.getProperty("user_check");
}
if(!StringUtil.isEmpty(e.getMessage())) {
addMessage(redirectAttributes,"error",e.getMessage());
}else {
addMessage(redirectAttributes,"error",message);
}
@@ -158,6 +188,7 @@ public class UserManageController extends BaseController{
throw e;
}
}
addMessage(redirectAttributes,"success","save_success");
}else{
entity.setEditTime(createTime);
entity.setEditorId(entity.getCurrentUser().getId());
@@ -241,13 +272,21 @@ public class UserManageController extends BaseController{
}
}
}
addMessage(redirectAttributes,"success","update_success");
}
} catch (MaatConvertException e) {
addMessage(redirectAttributes,"error",message);
if(!StringUtil.isEmpty(e.getMessage())) {
addMessage(redirectAttributes,"error",e.getMessage());
}else{
addMessage(redirectAttributes,"error",message);
}
return "redirect:" + adminPath +"/maintenance/userManage/list";
} catch (Exception e) {
addMessage(redirectAttributes,"error",message);
if(!StringUtil.isEmpty(e.getMessage())) {
addMessage(redirectAttributes,"error",e.getMessage());
}else{
addMessage(redirectAttributes,"error",message);
}
return "redirect:" + adminPath +"/maintenance/userManage/list";
}
return "redirect:" + adminPath +"/maintenance/userManage/list";

View File

@@ -6,35 +6,40 @@ 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.beanutils.BeanUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jets3t.service.ServiceException;
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.ServiceDictInfo;
import com.nis.domain.configuration.AvFileSampleCfg;
import com.nis.domain.configuration.AvVoipAccountCfg;
import com.nis.domain.configuration.BaseIpCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.DdosIpCfg;
import com.nis.domain.configuration.DnsResStrategy;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.NtcSubscribeIdCfg;
import com.nis.domain.configuration.DdosIpCfg;
import com.nis.domain.configuration.RequestInfo;
import com.nis.domain.configuration.template.DdosIpTemplate;
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.BaseController;
import com.nis.web.security.UserUtils;
@@ -266,4 +271,156 @@ public class DdosCfgController extends BaseController {
model.addAttribute("tabList", tabList);
return "/cfg/ddosSubList";
}
@RequestMapping(value = {"import"}, method=RequestMethod.POST)
public String importCfg(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<BaseIpCfg> ipPortCfgs =null;
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
//加载模板
ei.loadInitParams(DdosIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<DdosIpTemplate> list = ei.getDataList(DdosIpTemplate.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");
if (regionDict.getRegionType().equals(1)) {// IP
List<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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();
org.springframework.beans.BeanUtils.copyProperties(cfg, cfgIndexInfo,new String[] {"cfgId"});
if(cfg.getDnsStrategyId()!=null) {
cfgIndexInfo.setDnsStrategyId(Long.parseLong(cfg.getDnsStrategyId().toString()));
}
ind++;
}
ddosCfgService.saveAndSend(regionDict, _ipPortCfgs, isSend.equals("1"));
_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;
}
}

View File

@@ -302,6 +302,7 @@ public class IpMultiplexController extends CommonController {
public List<IpAddrPoolCfg> ajaxGetAddrPools(HttpServletRequest request, HttpServletResponse response) {
List<IpAddrPoolCfg> addrPools = ipAddrPoolCfgService.getEffectiveAddrPool();
List<IpAddrPoolCfg> addrPoolsNew = new ArrayList<>();
Properties msgProp = getMsgProp();
for (IpAddrPoolCfg addrPool : addrPools) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("addr_pool_id", addrPool.getCfgId());
@@ -309,6 +310,7 @@ public class IpMultiplexController extends CommonController {
Map<String, Object> resultMap = ConfigServiceUtil.getCGIInfo(url, Constants.IP_NUM_GET, params);
if (!StringUtil.isEmpty(resultMap) && !StringUtil.isEmpty(resultMap.get("num"))
&& Integer.parseInt(resultMap.get("num").toString()) > 0) {
addrPool.setAddrPoolName(msgProp.getProperty(addrPool.getAddrPoolName(),addrPool.getAddrPoolName()));
addrPoolsNew.add(addrPool);
}
}

View File

@@ -8,20 +8,28 @@ 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.bind.annotation.ResponseBody;
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.ServiceDictInfo;
import com.nis.domain.basics.SysDictInfo;
@@ -29,18 +37,29 @@ import com.nis.domain.configuration.AreaBean;
import com.nis.domain.configuration.AreaIpCfg;
import com.nis.domain.configuration.AvContUrlCfg;
import com.nis.domain.configuration.AvVoipAccountCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.NtcSubscribeIdCfg;
import com.nis.exceptions.MaatConvertException;
import com.nis.domain.configuration.AvVoipIpCfg;
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;
import com.nis.domain.configuration.template.BlackListComplexStringTemplate;
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.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.DateUtils;
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;
/**
* 处理音视频文本业务
@@ -1177,4 +1196,318 @@ public class AvContentController extends BaseController {
// return "redirect:" + adminPath
// +"/ntc/iplist/list?functionId="+entity.getFunctionId();
}
@RequestMapping(value = {"contUrlImport","voipImport"}, method=RequestMethod.POST)
public String importCfg(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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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(serviceDict.getAction().intValue()==16) {
//加载模板
ei.loadInitParams(BlackListIPTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListIPTemplate> list = ei.getDataList(BlackListIPTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> list = ei.getDataList(IpAllTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}
}else if (regionDict.getRegionType().equals(2)) {
if(serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListStringTemplate> list = ei.getDataList(BlackListStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> list = ei.getDataList(StringAllTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if (regionDict.getRegionType().equals(3)) {
if((regionDict.getFunctionId().intValue()==8)&&serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListComplexStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListComplexStringTemplate> list = ei.getDataList(BlackListComplexStringTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
avContentCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_ipPortCfgs.clear();
}
}else if (regionDict.getRegionType().equals(2)) {//账号
List<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
avContentCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_stringCfgs.clear();
}
} else if (regionDict.getRegionType().equals(3)) {//dns
List<ComplexkeywordCfg> _complexkeywordCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!complexkeywordCfgs.isEmpty()) {
complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
avContentCfgService.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;
}
}

View File

@@ -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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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<IpAllTemplate> 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<StringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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;
}
}

View File

@@ -9,8 +9,10 @@ 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.UUID;
import java.util.concurrent.BlockingQueue;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -19,32 +21,54 @@ import org.apache.commons.codec.digest.DigestUtils;
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;
import org.springframework.util.FileCopyUtils;
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.ComplexkeywordCfg;
import com.nis.domain.configuration.FileDigestCfg;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.NtcSubscribeIdCfg;
import com.nis.domain.configuration.P2pHashCfg;
import com.nis.domain.configuration.P2pKeywordCfg;
import com.nis.domain.configuration.template.BlackListComplexStringTemplate;
import com.nis.domain.configuration.template.BlackListIPTemplate;
import com.nis.domain.configuration.template.BlackListP2pHashStringTemplate;
import com.nis.domain.configuration.template.BlackListStringTemplate;
import com.nis.domain.configuration.template.BlackListP2pIpTemplate;
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.P2pHashStringTemplate;
import com.nis.domain.configuration.template.P2pIpTemplate;
import com.nis.domain.configuration.template.StringAllTemplate;
import com.nis.domain.maat.ToMaatResult;
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.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;
@@ -984,4 +1008,340 @@ public class FileTransferCfgController extends BaseController {
// return "redirect:" + adminPath
// +"/ntc/iplist/list?functionId="+entity.getFunctionId();
}
@RequestMapping(value = {"ftpImport","p2pImport"}, 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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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(serviceDict.getAction().intValue()==16) {
if("p2p_ip".equals(regionDict.getConfigServiceType())) {
//加载模板
ei.loadInitParams(BlackListP2pIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListP2pIpTemplate> list = ei.getDataList(BlackListP2pIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(BlackListIPTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListIPTemplate> list = ei.getDataList(BlackListIPTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}
}else if("p2p_ip".equals(regionDict.getConfigServiceType())) { // P2p IP
ei.loadInitParams(P2pIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<P2pIpTemplate> list = ei.getDataList(P2pIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> list = ei.getDataList(IpAllTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}
}else if (regionDict.getRegionType().equals(2)) {
if(serviceDict.getAction().intValue()==16) {
if("p2p_hash".equals(regionDict.getConfigServiceType())) {
ei.loadInitParams(BlackListP2pHashStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListP2pHashStringTemplate> list = ei.getDataList(BlackListP2pHashStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListStringTemplate> list = ei.getDataList(BlackListStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if("p2p_hash".equals(regionDict.getConfigServiceType())) { // P2p hash
ei.loadInitParams(P2pHashStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<P2pHashStringTemplate> list = ei.getDataList(P2pHashStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> list = ei.getDataList(StringAllTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if (regionDict.getRegionType().equals(3)) {
if((regionDict.getFunctionId().intValue()==8)&&serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListComplexStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListComplexStringTemplate> list = ei.getDataList(BlackListComplexStringTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
fileTransferCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_ipPortCfgs.clear();
}
}else if (regionDict.getRegionType().equals(2)) {//账号
List<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
fileTransferCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_stringCfgs.clear();
}
} else if (regionDict.getRegionType().equals(3)) {//dns
List<ComplexkeywordCfg> _complexkeywordCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!complexkeywordCfgs.isEmpty()) {
complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
fileTransferCfgService.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;
}
}

View File

@@ -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,33 @@ 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.BlackListComplexStringTemplate;
import com.nis.domain.configuration.template.BlackListIPTemplate;
import com.nis.domain.configuration.template.BlackListP2pHashStringTemplate;
import com.nis.domain.configuration.template.BlackListStringTemplate;
import com.nis.domain.configuration.template.BlackListP2pIpTemplate;
import com.nis.domain.configuration.template.ComplexStringAllNotDoLogTemplate;
import com.nis.domain.configuration.template.ComplexStringAllTemplate;
import com.nis.domain.configuration.template.DdosIpTemplate;
@@ -66,15 +89,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
@@ -362,10 +388,17 @@ public class IpController extends BaseController{
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(510) && "p2p_ip".equals(regionDict.getConfigServiceType())){ //P2p IP
List<P2pIpTemplate> classList=new ArrayList<P2pIpTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, P2pIpTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
if(serviceDict!=null&&serviceDict.getAction().equals(16)) {
List<BlackListP2pIpTemplate> classList=new ArrayList<BlackListP2pIpTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, BlackListP2pIpTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else {
List<P2pIpTemplate> classList=new ArrayList<P2pIpTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, P2pIpTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}
}else if(regionDict.getFunctionId().equals(600)){ //asnip
List<AsnIpTemplate> classList=new ArrayList<AsnIpTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, AsnIpTemplate.class, 2);
@@ -423,6 +456,23 @@ public class IpController extends BaseController{
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, IpSpoofingTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(405) || regionDict.getFunctionId().equals(563) || regionDict.getFunctionId().equals(565)
|| regionDict.getFunctionId().equals(566)) { // APP Feature IP
List<IpAllNotDoLogTemplate> classList=new ArrayList<IpAllNotDoLogTemplate>();
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)||regionDict.getFunctionId().equals(8)||regionDict.getFunctionId().equals(35)
||regionDict.getFunctionId().equals(51)||regionDict.getFunctionId().equals(22)||regionDict.getFunctionId().equals(24))&&serviceDict.getAction().equals(16)) {//SSL , HTTP ADVANCED URL mail,FTP,Steaming Media 的BLOCK
List<BlackListIPTemplate> classList=new ArrayList<BlackListIPTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, BlackListIPTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if((regionDict.getFunctionId().equals(63)||regionDict.getFunctionId().equals(407)||regionDict.getFunctionId().equals(408)) && serviceDict.getAction().equals(64)){// APP Policy限速
List<IpRateLimitTemplate> classList=new ArrayList<IpRateLimitTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpRateLimitTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else{
List<IpAllTemplate> classList=new ArrayList<IpAllTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpAllTemplate.class, 2);
@@ -432,7 +482,12 @@ public class IpController extends BaseController{
}
//str类模板
if(regionDict.getRegionType().equals(2)){
if(regionDict.getFunctionId().equals(510) && "p2p_hash".equals(regionDict.getConfigServiceType())){ //P2p hash
if(regionDict.getFunctionId().equals(510) && "p2p_hash".equals(regionDict.getConfigServiceType())&&serviceDict!=null&&serviceDict.getAction().equals(16)){ //P2p hash block
List<BlackListP2pHashStringTemplate> classList=new ArrayList<BlackListP2pHashStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, BlackListP2pHashStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(510) && "p2p_hash".equals(regionDict.getConfigServiceType())){ //P2p hash
List<P2pHashStringTemplate> classList=new ArrayList<P2pHashStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, P2pHashStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
@@ -484,6 +539,24 @@ 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 BLOCK
List<BlackListStringTemplate> classList=new ArrayList<BlackListStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, BlackListStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if((regionDict.getFunctionId().equals(6)||regionDict.getFunctionId().equals(635)||regionDict.getFunctionId().equals(8)
||regionDict.getFunctionId().equals(51)||regionDict.getFunctionId().equals(510)||regionDict.getFunctionId().equals(22)
||regionDict.getFunctionId().equals(24)
)&&serviceDict.getAction().equals(16)) {//URL, Advanced Website Keyword FTP Steaming Media BLOCK
List<BlackListStringTemplate> classList=new ArrayList<BlackListStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, BlackListStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(6)&&serviceDict.getAction().equals(128)) {//URL WHITELIST
List<StringAllNotDoLogTemplate> classList=new ArrayList<StringAllNotDoLogTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, StringAllNotDoLogTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else{
List<StringAllTemplate> classList=new ArrayList<StringAllTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, StringAllTemplate.class, 2);
@@ -524,6 +597,26 @@ public class IpController extends BaseController{
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, AppPayloadTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(565) || regionDict.getFunctionId().equals(564) || regionDict.getFunctionId().equals(566)){// APP Feature
List<ComplexStringAllNotDoLogTemplate> classList=new ArrayList<ComplexStringAllNotDoLogTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, ComplexStringAllNotDoLogTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if((regionDict.getFunctionId().equals(8))&&serviceDict.getAction().equals(16)) {// request header response header
List<BlackListComplexStringTemplate> classList=new ArrayList<BlackListComplexStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, BlackListComplexStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(37)&&serviceDict!=null&&serviceDict.getAction().intValue()==128) {//mail whiltelist
List<ComplexStringAllNotDoLogTemplate> classList=new ArrayList<ComplexStringAllNotDoLogTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,this.getMsgProp(),null, ComplexStringAllNotDoLogTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if(regionDict.getFunctionId().equals(37)&&serviceDict!=null&&serviceDict.getAction().intValue()==16) {//mail Block
List<BlackListComplexStringTemplate> classList=new ArrayList<BlackListComplexStringTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, BlackListComplexStringTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else{
List<ComplexStringAllTemplate> classList=new ArrayList<ComplexStringAllTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, ComplexStringAllTemplate.class, 2);
@@ -542,18 +635,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<BaseIpCfg> ipPortCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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<IpRateLimitTemplate> 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<IpAllNotDoLogTemplate> list = ei.getDataList(IpAllNotDoLogTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
} else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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)&&regionIds.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,

View File

@@ -8,8 +8,10 @@ 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.UUID;
import java.util.concurrent.BlockingQueue;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -17,30 +19,50 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.digest.DigestUtils;
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.util.FileCopyUtils;
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.ComplexkeywordCfg;
import com.nis.domain.configuration.FileDigestCfg;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.NtcSubscribeIdCfg;
import com.nis.domain.configuration.template.BlackListComplexStringTemplate;
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.DnsComplexStringTemplate;
import com.nis.domain.configuration.template.DnsIpTemplate;
import com.nis.domain.configuration.template.DnsStringTemplate;
import com.nis.domain.configuration.template.IpAllNotDoLogTemplate;
import com.nis.domain.configuration.template.IpAllTemplate;
import com.nis.domain.configuration.template.StringAllTemplate;
import com.nis.domain.maat.ToMaatResult;
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.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;
@@ -377,5 +399,322 @@ public class MailCfgController extends BaseController {
// return "redirect:" + adminPath
// +"/ntc/iplist/list?functionId="+entity.getFunctionId();
}
@RequestMapping(value = {"mailImport"}, method=RequestMethod.POST)
public String importMail(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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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(serviceDict.getAction().intValue()==16) {
//加载模板
ei.loadInitParams(BlackListIPTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListIPTemplate> list = ei.getDataList(BlackListIPTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> list = ei.getDataList(IpAllTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}
}else if (regionDict.getRegionType().equals(2)) {
if(serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListStringTemplate> list = ei.getDataList(BlackListStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> list = ei.getDataList(StringAllTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if (regionDict.getRegionType().equals(3)) {
if(serviceDict.getAction().intValue()==128) {
ei.loadInitParams(ComplexStringAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllNotDoLogTemplate> list = ei.getDataList(ComplexStringAllNotDoLogTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListComplexStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListComplexStringTemplate> list = ei.getDataList(BlackListComplexStringTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
mailCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_ipPortCfgs.clear();
}
}else if (regionDict.getRegionType().equals(2)) {//账号
List<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
mailCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_stringCfgs.clear();
}
} else if (regionDict.getRegionType().equals(3)) {
List<ComplexkeywordCfg> _complexkeywordCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!complexkeywordCfgs.isEmpty()) {
complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
mailCfgService.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;
}
}

View File

@@ -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,37 @@ 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.BlackListComplexStringTemplate;
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 +1091,331 @@ public class WebsiteController extends BaseController {
// return "redirect:" + adminPath
// +"/ntc/website/httpList?functionId="+entity.getFunctionId();
}
@RequestMapping(value = {"dnsImport","sslImport","httpImport"}, 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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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<DnsIpTemplate> list = ei.getDataList(DnsIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else if((regionDict.getFunctionId().intValue()==34||regionDict.getFunctionId().intValue()==8)&&serviceDict.getAction().intValue()==16) {
//加载模板
ei.loadInitParams(BlackListIPTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListIPTemplate> list = ei.getDataList(BlackListIPTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> 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<DnsStringTemplate> list = ei.getDataList(DnsStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if((regionDict.getFunctionId().intValue()==34||regionDict.getFunctionId().intValue()==635||regionDict.getFunctionId().intValue()==8)&&serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListStringTemplate> list = ei.getDataList(BlackListStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> list = ei.getDataList(StringAllTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if (regionDict.getRegionType().equals(3)) {
if(regionDict.getFunctionId().equals(7)&&serviceDict.getAction().intValue()==16) {
ei.loadInitParams(DnsComplexStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<DnsComplexStringTemplate> list = ei.getDataList(DnsComplexStringTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if((regionDict.getFunctionId().intValue()==8)&&serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListComplexStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListComplexStringTemplate> list = ei.getDataList(BlackListComplexStringTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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<ComplexkeywordCfg> _complexkeywordCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!complexkeywordCfgs.isEmpty()) {
complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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;
}
}

View File

@@ -6,30 +6,54 @@ 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.ComplexkeywordCfg;
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.IpWhitelistTemplate;
import com.nis.domain.configuration.template.StringAllNotDoLogTemplate;
import com.nis.domain.configuration.template.StringAllTemplate;
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 +193,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 +362,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<BaseIpCfg> ipPortCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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<IpWhitelistTemplate> 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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)&&regionIds.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,
@@ -567,5 +731,139 @@ public class WhiteListController extends CommonController {
// return "redirect:" + adminPath
// +"/ntc/iplist/list?functionId="+entity.getFunctionId();
}
@RequestMapping(value = "domain/import", method=RequestMethod.POST)
public String importDomain(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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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(2)) {
if(serviceDict.getAction().intValue()==128) {
ei.loadInitParams(StringAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllNotDoLogTemplate> list = ei.getDataList(StringAllNotDoLogTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(serviceDict.getAction().intValue()==16) {
ei.loadInitParams(BlackListStringTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<BlackListStringTemplate> list = ei.getDataList(BlackListStringTemplate.class );
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> 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(2)) {//账号
List<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
domainService.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;
}
}

View File

@@ -256,7 +256,7 @@ public class CachePolicyController extends BaseController{
classMap.put(entity.getMenuNameCode(), CachePolicyUserRegion.class);
classMap.put("PXY_CACHE_HTTP_URL", HttpUrlCfg.class);
classMap.put("PXY_CACHE_HTTP_COOKIE", HttpUrlCfg.class);
String cfgIndexInfoNoExport=",block_type,policy_name,group_name,userregion1,userregion2,userregion3,userregion4,userregion5,&action:block_type-";
String cfgIndexInfoNoExport=",block_type,do_log,policy_name,group_name,userregion1,userregion2,userregion3,userregion4,userregion5,&action:block_type-";
String httpUrlInfoNoExport=",block_type,do_log,action,config_describe,valid_identifier,is_audit,creator,creator"
+ ",config_time,editor,edit_time,auditor,audit_time"
+",letter,whether_area_block,classification,attribute,label"

View File

@@ -8,6 +8,7 @@ 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,17 +16,22 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.Logical;
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.nis.domain.FunctionRegionDict;
import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page;
import com.nis.domain.callback.ProxyFileStrategyCfg;
import com.nis.domain.configuration.BaseIpCfg;
import com.nis.domain.configuration.BaseStringCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.ComplexkeywordCfg;
@@ -35,10 +41,27 @@ 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.ComplexStringAllNotDoLogTemplate;
import com.nis.domain.configuration.template.ComplexStringAllTemplate;
import com.nis.domain.configuration.template.HttpsRedirectComplexTemplate;
import com.nis.domain.configuration.template.HttpsRedirectIpTemplate;
import com.nis.domain.configuration.template.HttpsRedirectTemplate;
import com.nis.domain.configuration.template.HttpsRejectComplexTemplate;
import com.nis.domain.configuration.template.HttpsRejectIpTemplate;
import com.nis.domain.configuration.template.HttpsRejectTemplate;
import com.nis.domain.configuration.template.HttpsReplaceComplexTemplate;
import com.nis.domain.configuration.template.HttpsReplaceIpTemplate;
import com.nis.domain.configuration.template.HttpsReplaceTemplate;
import com.nis.domain.configuration.template.IpAllNotDoLogTemplate;
import com.nis.domain.configuration.template.IpAllTemplate;
import com.nis.domain.configuration.template.StringAllNotDoLogTemplate;
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.excel.ImportBigExcel;
import com.nis.web.controller.BaseController;
import com.nis.web.security.UserUtils;
@@ -499,4 +522,367 @@ public class HttpRedirectPolicyController extends BaseController {
* +"/ntc/website/httpList?functionId="+entity.getFunctionId();
*/
}
@RequestMapping(value = {"import"}, 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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
BlockingQueue<ComplexkeywordCfg> complexkeywordCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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().equals(207)){// HTTP(s)阻断
//加载模板
ei.loadInitParams(HttpsRejectIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRejectIpTemplate> list = ei.getDataList(HttpsRejectIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else if(regionDict.getFunctionId().equals(208)){// HTTP(s)重定向
//加载模板
ei.loadInitParams(HttpsRedirectIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRedirectIpTemplate> list = ei.getDataList(HttpsRedirectIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else if(regionDict.getFunctionId().equals(209)){// HTTP(s)替换
//加载模板
ei.loadInitParams(HttpsReplaceIpTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsReplaceIpTemplate> list = ei.getDataList(HttpsReplaceIpTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else if(regionDict.getFunctionId().equals(211)){// HTTP(s)白名单
//加载模板
ei.loadInitParams(IpAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllNotDoLogTemplate> list = ei.getDataList(IpAllNotDoLogTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllTemplate> list = ei.getDataList(IpAllTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,null, list);
}
}else if (regionDict.getRegionType().equals(2)) {
if(regionDict.getFunctionId().equals(207)){// HTTP(s)阻断
//加载模板
ei.loadInitParams(HttpsRejectTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRejectTemplate> list = ei.getDataList(HttpsRejectTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(regionDict.getFunctionId().equals(208)){// HTTP(s)重定向
//加载模板
ei.loadInitParams(HttpsRedirectTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRedirectTemplate> list = ei.getDataList(HttpsRedirectTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(regionDict.getFunctionId().equals(209)){// HTTP(s)替换
//加载模板
ei.loadInitParams(HttpsReplaceTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsReplaceTemplate> list = ei.getDataList(HttpsReplaceTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(regionDict.getFunctionId().equals(211)){// HTTP(s)白名单
//加载模板
ei.loadInitParams(StringAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllNotDoLogTemplate> list = ei.getDataList(StringAllNotDoLogTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
//加载模板
ei.loadInitParams(StringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<StringAllTemplate> list = ei.getDataList(StringAllTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}
}else if (regionDict.getRegionType().equals(3)) {
if(regionDict.getFunctionId().equals(207)){// HTTP(s)阻断
//加载模板
ei.loadInitParams(HttpsRejectComplexTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRejectComplexTemplate> list = ei.getDataList(HttpsRejectComplexTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
} else if(regionDict.getFunctionId().equals(208)){// HTTP(s)重定向
//加载模板
ei.loadInitParams(HttpsRedirectComplexTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsRedirectComplexTemplate> list = ei.getDataList(HttpsRedirectComplexTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
} else if(regionDict.getFunctionId().equals(209)){// HTTP(s)替换
//加载模板
ei.loadInitParams(HttpsReplaceComplexTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<HttpsReplaceComplexTemplate> list = ei.getDataList(HttpsReplaceComplexTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
} else if(regionDict.getFunctionId().equals(211)){// HTTP(s)白名单
//加载模板
ei.loadInitParams(ComplexStringAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllNotDoLogTemplate> list = ei.getDataList(ComplexStringAllNotDoLogTemplate.class);
complexkeywordCfgs = this.checkComplexStringCfgMulity(errTip,serviceDict, regionDict, list);
}else {
//加载模板
ei.loadInitParams(ComplexStringAllTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<ComplexStringAllTemplate> 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<BaseIpCfg> _ipPortCfgs=com.beust.jcommander.internal.Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+e.getMessage());
}
}else {
try {
regionIds = ConfigServiceUtil.getId(3,_ipPortCfgs.size());
} catch (Exception e) {
e.printStackTrace();
logger.info("获取域ID出错");
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
httpRedirectCfgService.saveAndSend(regionDict, cfgIndexInfos, _ipPortCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_ipPortCfgs.clear();
}
}else if (regionDict.getRegionType().equals(2)) {//账号
List<BaseStringCfg<?>> _stringCfgs=com.beust.jcommander.internal.Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
httpRedirectCfgService.saveAndSend(regionDict, cfgIndexInfos, _stringCfgs, isSend.equals("1"));
cfgIndexInfos.clear();
_stringCfgs.clear();
}
} else if (regionDict.getRegionType().equals(3)) {//dns
List<ComplexkeywordCfg> _complexkeywordCfgs=com.beust.jcommander.internal.Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!complexkeywordCfgs.isEmpty()) {
complexkeywordCfgs.drainTo(_complexkeywordCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
httpRedirectCfgService.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;
}
}

View File

@@ -8,31 +8,59 @@ 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.PolicyGroupInfo;
import com.nis.domain.configuration.AppPolicyCfg;
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.HttpUrlCfg;
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.BlackListComplexStringTemplate;
import com.nis.domain.configuration.template.BlackListIPTemplate;
import com.nis.domain.configuration.template.BlackListP2pHashStringTemplate;
import com.nis.domain.configuration.template.BlackListP2pIpTemplate;
import com.nis.domain.configuration.template.BlackListStringTemplate;
import com.nis.domain.configuration.template.ComplexStringAllTemplate;
import com.nis.domain.configuration.template.DomainInterceptMonitTemplate;
import com.nis.domain.configuration.template.DomainInterceptRateLimitTemplate;
import com.nis.domain.configuration.template.DomainInterceptTemplate;
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.domain.configuration.template.P2pHashStringTemplate;
import com.nis.domain.configuration.template.P2pIpTemplate;
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.excel.ImportBigExcel;
import com.nis.web.controller.configuration.CommonController;
import com.nis.web.security.UserUtils;
@@ -88,12 +116,12 @@ public class InterceptController extends CommonController {
}
// 获取证书信息
List<PxyObjKeyring> certificateList = new ArrayList<PxyObjKeyring>();
if (entity.getFunctionId().equals(200)) {
certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, "ip");
}
if (entity.getFunctionId().equals(201)) {
certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, "domain");
}
// if (entity.getFunctionId().equals(200)) {
certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, null);
// }
// if (entity.getFunctionId().equals(201)) {
// certificateList = pxyObjKeyringService.findPxyObjKeyrings(null, 1, 1, "domain");
// }
model.addAttribute("certificateList", certificateList);
model.addAttribute("_cfg", entity);
@@ -250,7 +278,248 @@ public class InterceptController extends CommonController {
* redirectAttributes){ this._exportIp(columns,model, request, response,
* entity, ids, redirectAttributes); }
*/
@RequestMapping(value = {"/ippayload/import","/ip/import","/domain/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<BaseIpCfg> ipPortCfgs =null;
BlockingQueue<BaseStringCfg<?>> stringCfgs =null;
List<CfgIndexInfo> cfgIndexInfos = new ArrayList<CfgIndexInfo>();
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<IpPayloadTemplate> 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<IpSpoofingTemplate> list = ei.getDataList(IpSpoofingTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list);
} else if(regionDict.getFunctionId().equals(200)) {//Intercept Policy
if(regionDict.getDictId().equals(53)) {
if(serviceDict.getAction().equals(64)) {
//加载模板
ei.loadInitParams(IpRateLimitTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpRateLimitTemplate> list = ei.getDataList(IpRateLimitTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list);
}else {
//加载模板
ei.loadInitParams(IpAllNotDoLogTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<IpAllNotDoLogTemplate> list = ei.getDataList(IpAllNotDoLogTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,null, list);
}
}
if(regionDict.getDictId().equals(56)) {
if(serviceDict.getAction().equals(1)){// 监测
//加载模板
ei.loadInitParams(DomainInterceptMonitTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<DomainInterceptMonitTemplate> list = ei.getDataList(DomainInterceptMonitTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else if(serviceDict.getAction().equals(64)){// 限速
//加载模板
ei.loadInitParams(DomainInterceptRateLimitTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<DomainInterceptRateLimitTemplate> list = ei.getDataList(DomainInterceptRateLimitTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, list);
}else{// 白名单
//加载模板
ei.loadInitParams(DomainInterceptTemplate.class, properties, regionDict, serviceDict);
BlockingQueue<DomainInterceptTemplate> list = ei.getDataList(DomainInterceptTemplate.class);
stringCfgs=this.checkStringCfgMulity(errTip,serviceDict, regionDict, 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<BaseIpCfg> _ipPortCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
if (regionDict.getRegionType().equals(1)) {// IP
while(!ipPortCfgs.isEmpty()) {
ipPortCfgs.drainTo(_ipPortCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> regionIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> numRegionGroupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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(212)||regionDict.getFunctionId().equals(200)) {// IP Payload ,Intercept Policy
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.saveAndSend(regionDict,cfgIndexInfos, _ipPortCfgs, isSend.equals("1"));
}
cfgIndexInfos.clear();
_ipPortCfgs.clear();
}
}else if(regionDict.getRegionType().equals(2)){//String
List<BaseStringCfg<?>> _stringCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
while(!stringCfgs.isEmpty()) {
stringCfgs.drainTo(_stringCfgs, Constants.MAAT_JSON_SEND_SIZE);
List<Integer> compileIds=Lists.newArrayList();
List<Integer> groupIds=Lists.newArrayList();
List<Integer> 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("<spring:message code=\"request_service_failed\"/>:"+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&&regionIds.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++;
}
interceptCfgService.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;
}
// ip配置导出
@RequestMapping(value = "exportIpAddr")
public void exportIpAddr(Model model, HttpServletRequest request, HttpServletResponse response,
@@ -441,5 +710,5 @@ public class InterceptController extends CommonController {
// return "redirect:" + adminPath
// +"/ntc/iplist/list?functionId="+entity.getFunctionId();
}
}

View File

@@ -41,6 +41,7 @@ import com.google.common.collect.Maps;
import com.nis.domain.Page;
import com.nis.domain.basics.PolicyGroupInfo;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.configuration.DnsIpCfg;
import com.nis.domain.configuration.DnsResStrategy;
import com.nis.domain.configuration.IpPortCfg;
import com.nis.domain.configuration.PxyObjKeyring;
@@ -911,4 +912,31 @@ public class PxyObjKeyringController extends BaseController {
}
return "redirect:" + adminPath + "/proxy/intercept/strateagy/trustedCertList?functionId=" + functionId;
}
/**
* 验证Keyring是否有被使用
*
* @param entity
* @param request
* @param response
* @return
*/
@ResponseBody
@RequestMapping(value = { "/ajaxKeyinfIsUsed" })
public boolean ajaxKeyinfIsUsed(String[] compileIds, HttpServletRequest request, HttpServletResponse response) {
for(String compileId:compileIds){
CfgIndexInfo cfg = new CfgIndexInfo();
cfg.setIsAudit(1);
cfg.setIsValid(1);
cfg.setFunctionId(200);//代理拦截策略
cfg.setServiceId(512);
cfg.setUserRegion1(compileId);
List<CfgIndexInfo> list = httpRedirectCfgService.getCfgIndexInfos(cfg);
if (list.size() > 0) {
return false;
}
}
return true;
}
}

View File

@@ -263,12 +263,13 @@ public class DashboardController extends BaseController{
list = gson.fromJson(fromJsonList.get("data").toString(), new TypeToken<List<TrafficIpActiveStatistic>>() {}.getType()) ;
if(list.size()>0) {
DecimalFormat lf = new DecimalFormat("0");
DecimalFormat f = new DecimalFormat("0.00");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//两个时间段之间的秒数
double allSeconds = DateUtils.getSecondsOfTwoDate(sdf.parse(beginDate),sdf.parse(endDate));
for(TrafficIpActiveStatistic data:list) {
data.setAvgByte(lf.format(Integer.parseInt(data.get_byte())*8/allSeconds));
data.setAvgPacket(lf.format(Integer.parseInt(data.get_packet())/allSeconds));
data.setAvgByte(f.format(Long.parseLong(data.get_byte())*8/1024/1024/1024/allSeconds));
data.setAvgPacket(lf.format(Long.parseLong(data.get_packet())/allSeconds));
}
}
Collections.sort(list, new Comparator<TrafficIpActiveStatistic>() {

View File

@@ -47,6 +47,7 @@ import com.nis.util.DateUtil;
import com.nis.util.DateUtils;
import com.nis.util.DictUtils;
import com.nis.util.StringUtil;
import com.nis.util.StringUtils;
import com.nis.util.httpclient.HttpClientUtil;
import com.nis.web.controller.BaseController;
import com.nis.web.dao.dashboard.codedic.CodeResult;
@@ -261,7 +262,7 @@ public class TrafficStatisticsInfoController extends BaseController {
*/
@RequestMapping(value="bandwidthTransThree")
@ResponseBody
public Map bandwidthTransThree(String beginDate,String endDate,String searchQuotaType){
public Map bandwidthTransThree(String beginDate,String endDate,String searchQuotaType,String searchDirection,Model model){
Map<String, Object> fromJsonList = new HashMap<String, Object>();
Map map = new HashMap();
//String url = Constants.DASHBOARD_URL+Constants.TRAFFIC_BANDWIDTH_TRANS_TWO;
@@ -270,11 +271,16 @@ public class TrafficStatisticsInfoController extends BaseController {
try {
url=urlAddDate(url,beginDate,endDate);
url=url+"&searchQuotaType="+searchQuotaType;
if (!StringUtil.isEmpty(searchDirection)) {
url=url+"&searchDirection="+searchDirection;
}
String string = HttpClientUtil.get(url);
Gson gson = new GsonBuilder().create();
fromJsonList = gson.fromJson(string, new TypeToken<Map>(){}.getType());
logger.debug("bandwidthTransThree服务查询数据成功");
Map result = (Map)fromJsonList.get("data");
model.addAttribute("searchDirection", searchDirection);
return result;
} catch (Exception e) {
e.printStackTrace();
@@ -301,7 +307,7 @@ public class TrafficStatisticsInfoController extends BaseController {
*/
@RequestMapping(value="protocolList")
@ResponseBody
public List protocolList(Model model,Integer entranceId,Integer[] protoType,@RequestParam(required=false)String beginDate,@RequestParam(required=false)String endDate){
public List protocolList(Model model,Integer entranceId,Integer[] protoType,@RequestParam(required=false)String beginDate,@RequestParam(required=false)String endDate,@RequestParam(required=false)String searchDirection){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String, Object> fromJsonList = new HashMap<String, Object>();
List list = new ArrayList();
@@ -318,6 +324,9 @@ public class TrafficStatisticsInfoController extends BaseController {
if(entranceId!=null){
url=url+"&entranceId="+entranceId;
}
if (!StringUtil.isEmpty(searchDirection)) {
url=url+"&searchDirection="+searchDirection;
}
String string = HttpClientUtil.get(url);
Gson gson = new GsonBuilder().create();
fromJsonList = gson.fromJson(string, new TypeToken<Map>(){}.getType());
@@ -327,6 +336,7 @@ public class TrafficStatisticsInfoController extends BaseController {
Long totalPackets=0l;
Double totalGByte=0d;
DecimalFormat lf = new DecimalFormat("0");
DecimalFormat f = new DecimalFormat("0.00");
DecimalFormat df = new DecimalFormat("0.0000000000");
List<CodeResult> appCodeList = CodeDicUtils.getCodeList("appCode");
//两个时间段之间的秒数
@@ -342,8 +352,8 @@ public class TrafficStatisticsInfoController extends BaseController {
m.put("linkNum", lf.format(m.get("linkNum")));
double avgPacket=Double.parseDouble(m.get("packets").toString())/allSeconds;
m.put("pps",lf.format(avgPacket));
double avgByte=Double.parseDouble(m.get("GByte").toString())*1024*1024*1024*8/allSeconds;
m.put("bps",lf.format(avgByte));
double avgByte=Double.parseDouble(m.get("GByte").toString())*8/allSeconds;
m.put("bps",f.format(avgByte));
totalLink+=Long.parseLong( m.get("linkNum").toString());
totalPackets+=Long.parseLong(m.get("packets").toString());
// 协议没匹配的匹配app码表
@@ -362,7 +372,7 @@ public class TrafficStatisticsInfoController extends BaseController {
m.put("totalGByte", totalGByte);
}
}
model.addAttribute("searchDirection", searchDirection);
} catch (Exception e) {
e.printStackTrace();
logger.error("协议详情数据获取错误"+e);
@@ -414,6 +424,7 @@ public class TrafficStatisticsInfoController extends BaseController {
Long totalPackets=0l;
Double totalGByte=0d;
DecimalFormat lf = new DecimalFormat("0");
DecimalFormat f = new DecimalFormat("0.00");
DecimalFormat df = new DecimalFormat("0.0000000000");
//两个时间段之间的秒数
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -431,8 +442,8 @@ public class TrafficStatisticsInfoController extends BaseController {
double avgPacket=Double.parseDouble(m.get("packets").toString())/allSeconds;
m.put("pps",lf.format(avgPacket));
double avgByte=Double.parseDouble(m.get("GByte").toString())*1024*1024*1024*8/allSeconds;
m.put("bps",lf.format(avgByte));
double avgByte=Double.parseDouble(m.get("GByte").toString())*8/allSeconds;
m.put("bps",f.format(avgByte));
}
for (Object object : list) {
Map m=(Map) object;
@@ -453,7 +464,7 @@ public class TrafficStatisticsInfoController extends BaseController {
* App趋势界面 独立IP访问数量趋势图
*/
@RequestMapping(value="appTrendList")
public String appTrendList(Model model,String beginDate,String endDate,String appName,Integer appType){
public String appTrendList(Model model,String beginDate,String endDate,Integer appType,Integer entranceId){
if(StringUtil.isBlank(beginDate)||StringUtil.isBlank(endDate)){
Calendar cal = Calendar. getInstance ();
cal.setTime(new Date());
@@ -461,19 +472,43 @@ public class TrafficStatisticsInfoController extends BaseController {
cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) - 2);
beginDate = new SimpleDateFormat( "yyyy-MM-dd HH:mm:00" ).format(cal.getTime());
}
//标签集合
List<CodeResult> codeList = CodeDicUtils.getCodeList("appCode");
//将数字替换为标签文字
String appName="";
if(appType!=null){
Double value1 = Double.valueOf(appType);
for (CodeResult code : codeList) {
Double value2 = Double.valueOf(code.getCode().trim());
if(value1.equals(value2)){
appName= code.getItem().trim();
break;
}
}
}
model.addAttribute("appName", appName);
model.addAttribute("appType", appType);
model.addAttribute("entranceId", entranceId);
model.addAttribute("beginDate", beginDate);
model.addAttribute("endDate", endDate);
return "/dashboard/trafficAppTrendList";
}
@RequestMapping("ajaxAppTrend")
@ResponseBody
public Map ajaxAppTrend(String beginDate,String endDate,Integer appType,Integer entranceId,Model model){
public Map ajaxAppTrend(String beginDate,String endDate,Integer appType,Integer entranceId,String searchQuotaType,Integer[] searchIspCode,Model model){
Map<String, Object> fromJsonList = new HashMap<String, Object>();
Map list = new HashMap();
try {
String url=Constants.DASHBOARD_URL+Constants.TRAFFIC_APP_TREND;
//TRAFFIC_APP_PPS_TREND
String trafficApp=Constants.TRAFFIC_APP_TREND;
if("Unique Ip".equals(searchQuotaType)){
trafficApp=Constants.TRAFFIC_APP_TREND;
}else if("Gbps".equals(searchQuotaType)){
trafficApp=Constants.TRAFFIC_APP_BPS_TREND;
}else if("pps".equals(searchQuotaType)){
trafficApp=Constants.TRAFFIC_APP_PPS_TREND;
}
String url=Constants.DASHBOARD_URL+trafficApp;
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.addParameter("searchStartTime",beginDate);
uriBuilder.addParameter("searchEndTime",endDate);
@@ -484,6 +519,10 @@ public class TrafficStatisticsInfoController extends BaseController {
if(entranceId!=null){
url=url+"&searchEntranceId="+entranceId;
}
if(searchIspCode!=null&&searchIspCode.length>0){
String str=StringUtils.join(searchIspCode,",");
url=url+"&searchIspCode="+str;
}
String string = HttpClientUtil.get(url);
Gson gson = new GsonBuilder().create();
fromJsonList = gson.fromJson(string, new TypeToken<Map<String, Object>>(){}.getType());
@@ -499,7 +538,7 @@ public class TrafficStatisticsInfoController extends BaseController {
}
@RequestMapping("ajaxAppTopList")
@ResponseBody
public List ajaxAppTopList(String beginDate,String endDate,Integer appType,Integer entranceId,Integer searchQuota,Model model){
public List ajaxAppTopList(String beginDate,String endDate,Integer appType,Integer entranceId,Integer searchQuota,Integer[] searchIspCode,Model model){
Map<String, Object> fromJsonList = new HashMap<String, Object>();
List<Map> list = new ArrayList<Map>();
try {
@@ -519,6 +558,10 @@ public class TrafficStatisticsInfoController extends BaseController {
}else{
url=url+"&searchQuota="+1; // 默认是按照link 排序
}
if(searchIspCode!=null&&searchIspCode.length>0){
String str=StringUtils.join(searchIspCode,",");
url=url+"&searchIspCode="+str;
}
String string = HttpClientUtil.get(url);
Gson gson = new GsonBuilder().create();
fromJsonList = gson.fromJson(string, new TypeToken<Map<String, Object>>(){}.getType());
@@ -527,13 +570,14 @@ public class TrafficStatisticsInfoController extends BaseController {
if(list.size()>0) {
//两个时间段之间的秒数
DecimalFormat dl = new DecimalFormat("0");
DecimalFormat f = new DecimalFormat("0.00");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
double allSeconds = DateUtils.getSecondsOfTwoDate(sdf.parse(beginDate),sdf.parse(endDate));
for(Map m:list) {
double avgPacket=Double.parseDouble(m.get("pktNum").toString())/allSeconds;
m.put("pps",dl.format(avgPacket));
double avgByte=Double.parseDouble(m.get("byteNum").toString())*8/allSeconds;
m.put("bps",dl.format(avgByte));
double avgByte=Double.parseDouble(m.get("byteNum").toString())*8/1024/1024/1024/allSeconds;
m.put("bps",f.format(avgByte));
}
}
} catch (Exception e) {
@@ -634,6 +678,7 @@ public class TrafficStatisticsInfoController extends BaseController {
DecimalFormat df = new DecimalFormat("0.000000000");
DecimalFormat dl = new DecimalFormat("0");
DecimalFormat pf = new DecimalFormat("0.000000000");
DecimalFormat f = new DecimalFormat("0.00");
// Double totalLink=0d;
Double totalGbyte=0d;
Double totalPackets=0d;
@@ -651,8 +696,8 @@ public class TrafficStatisticsInfoController extends BaseController {
double avgPacket=Double.parseDouble(m.get("pktCount").toString())/allSeconds;
m.put("pps",dl.format(avgPacket));
double avgByte=Double.parseDouble(m.get("byteCount").toString())*8/allSeconds;
m.put("bps",dl.format(avgByte));
double avgByte=Double.parseDouble(m.get("byteCount").toString())*8/1024/1024/1024/allSeconds;
m.put("bps",f.format(avgByte));
}
List<WebsiteDomainTopic> codeList = appCfgService.getDomainDict(new WebsiteDomainTopic());
Map<Long, String> map = new HashMap<Long,String>();
@@ -722,6 +767,7 @@ public class TrafficStatisticsInfoController extends BaseController {
Long totalPackets=0l;
Double totalGByte=0d;
DecimalFormat lf = new DecimalFormat("0");
DecimalFormat f = new DecimalFormat("0.00");
//两个时间段之间的秒数
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
double allSeconds = DateUtils.getSecondsOfTwoDate(sdf.parse(beginDate),sdf.parse(endDate));
@@ -733,8 +779,8 @@ public class TrafficStatisticsInfoController extends BaseController {
totalGByte+=Double.parseDouble(lf.format(m.get("count")));
double avgPacket=Double.parseDouble(m.get("packets").toString())/allSeconds;
m.put("pps",lf.format(avgPacket));
double avgByte=Double.parseDouble(m.get("count").toString())*8/allSeconds;
m.put("bps",lf.format(avgByte));
double avgByte=Double.parseDouble(m.get("count").toString())*8/1024/1024/1024/allSeconds;
m.put("bps",f.format(avgByte));
m.remove("domainData");
Double value1=0d;
if(StringUtil.isBlank(m.get("topicId").toString())){

View File

@@ -116,6 +116,10 @@ public class BgpLogController extends BaseController {
if (fromJson.getStatus().intValue() == 200) {
Page<NtcBGPLog> data = fromJson.getData();
list = data.getList();
for (NtcBGPLog l : list) {
l.setFunctionId(log.getFunctionId());
setLogAction(l, serviceList);
}
}
}
titleList.add("bgp_control");

View File

@@ -30,6 +30,7 @@ import com.nis.domain.log.NtcMailLog;
import com.nis.domain.maat.LogRecvData;
import com.nis.util.Constants;
import com.nis.util.DictUtils;
import com.nis.util.StringUtil;
import com.nis.util.httpclient.HttpClientUtil;
import com.nis.web.controller.BaseController;
import com.nis.web.security.UserUtils;
@@ -46,6 +47,28 @@ public class MailLogController extends BaseController {
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
model.addAttribute("serviceList", serviceList);
if (StringUtil.isEmpty(log.getService())) {
String searchService = "";
for (int i = 0; i < serviceList.size(); i++) {
if (i != 0) {
searchService += ",";
}
searchService += (serviceList.get(i).getServiceId() == null ? ""
: serviceList.get(i).getServiceId());
// log.setAction(serviceList.get(i).getAction());
}
if (StringUtils.isNotBlank(searchService)) {
params.put("searchService", searchService);
}
} else {
log.setAction(serviceList.get(0).getAction());
}
initLogSearchValue(log, params);
// 增加收/发件人、邮件主题查询
@@ -59,9 +82,6 @@ public class MailLogController extends BaseController {
params.put("searchSubject", StringEscapeUtils.unescapeHtml(log.getSubject()));
}
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
model.addAttribute("serviceList", serviceList);
String url = Constants.LOG_BASE_URL + Constants.NTC_MAIL_LOG;
String recv = HttpClientUtil.getMsg(url, params, request);
@@ -108,6 +128,27 @@ public class MailLogController extends BaseController {
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
model.addAttribute("serviceList", serviceList);
if (StringUtil.isEmpty(log.getService())) {
String searchService = "";
for (int i = 0; i < serviceList.size(); i++) {
if (i != 0) {
searchService += ",";
}
searchService += (serviceList.get(i).getServiceId() == null ? ""
: serviceList.get(i).getServiceId());
// log.setAction(serviceList.get(i).getAction());
}
if (StringUtils.isNotBlank(searchService)) {
params.put("searchService", searchService);
}
} else {
log.setAction(serviceList.get(0).getAction());
}
initLogSearchValue(log, params);
// 增加收/发件人、邮件主题查询
@@ -120,9 +161,7 @@ public class MailLogController extends BaseController {
if (StringUtils.isNotBlank(log.getSubject())) {
params.put("searchSubject", StringEscapeUtils.unescapeHtml(log.getSubject()));
}
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
model.addAttribute("serviceList", serviceList);
String url = Constants.LOG_BASE_URL + Constants.NTC_MAIL_LOG;
String recv = HttpClientUtil.getMsg(url, params, request);
@@ -151,7 +190,7 @@ public class MailLogController extends BaseController {
String cfgIndexInfoNoExport = "," + hColumns;
noExportMap.put("mail_control", cfgIndexInfoNoExport);
dataMap.put("mail_control", list);
String timeRange= initLogMap(log,"mail_control");
String timeRange = initLogMap(log, "mail_control");
noExportMap.put("timeRange", timeRange);
/* } */
if ("csv".equals(type)) {

View File

@@ -23,6 +23,7 @@ import com.nis.domain.Page;
import com.nis.domain.PageLog;
import com.nis.domain.SysUser;
import com.nis.domain.configuration.WebsiteDomainTopic;
import com.nis.domain.dashboard.SysIspInfo;
import com.nis.domain.log.NtcConnRecordLog;
import com.nis.domain.maat.LogRecvData;
import com.nis.exceptions.MaatConvertException;
@@ -119,6 +120,19 @@ public class NtcConnRecordLogController extends BaseController {
}.getType());
if (fromJson.getStatus().intValue() == 200) {
Page<NtcConnRecordLog> data = fromJson.getData();
List<SysIspInfo> ispList = CodeDicUtils.getIspListByIspNum();
/*if(data.getList()!=null&&data.getList().size()>0){
for (NtcConnRecordLog cnn : data.getList()) {
String isNum=cnn.getEntranceId()+""+cnn.getDeviceId();
for (SysIspInfo sysIspInfo : ispList) {
if(isNum.equals(sysIspInfo.getIspNum())){
cnn.setIspName(sysIspInfo.getIspKeyName());
break;
}
}
}
}*/
page.setCount(data.getCount());
page.setLast(data.getLast());
page.setList(data.getList());

View File

@@ -276,11 +276,10 @@ public class ReportController extends BaseController {
Map<String, String> noExportMap = new HashMap<String, String>();
// ---------------------------
PageLog<NtcAsnRecord> page = new PageLog<NtcAsnRecord>(request, response);
page.setPageNo(1);
page.setPageSize(Constants.MAX_LOG_EXPORT_SIZE);
page.setPageSize(-1);
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
//params.put("pageNo", page.getPageNo());
// 判断请求参数
if (StringUtils.isNotEmpty(log.getSearchAsnType())) {
params.put("searchAsnType", log.getSearchAsnType());
@@ -381,11 +380,10 @@ public class ReportController extends BaseController {
Map<String, String> noExportMap = new HashMap<String, String>();
// ---------------------------
PageLog<NtcIpRangeReport> page = new PageLog<NtcIpRangeReport>(request, response);
page.setPageNo(1);
page.setPageSize(Constants.MAX_LOG_EXPORT_SIZE);
//page.setPageNo(1);
page.setPageSize(-1);
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
log.setSearchAreaType(seType);
// 判断请求参数
// 查询国家
@@ -473,11 +471,11 @@ public class ReportController extends BaseController {
Map<String, String> noExportMap = new HashMap<String, String>();
// ---------------------------
PageLog<NtcURLReport> page = new PageLog<NtcURLReport>(request, response);
page.setPageNo(1);
page.setPageSize(Constants.MAX_LOG_EXPORT_SIZE);
//page.setPageNo(1);
page.setPageSize(-1);
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
//params.put("pageNo", page.getPageNo());
// 判断请求参数
if (StringUtils.isNotBlank(log.getSearchReportStartTime())
&& StringUtils.isNotBlank(log.getSearchReportEndTime())) {

View File

@@ -110,6 +110,20 @@ public class UserController extends BaseController{
// 如果新密码为空,则不更换密码
if (StringUtils.isNotBlank(user.getNewPassword())) {
user.setPassword(StringUtils.entryptPassword(user.getNewPassword()));
//密码修改之后更新此用户的redis缓存
RealmSecurityManager securityManager = (RealmSecurityManager) SecurityUtils.getSecurityManager();
Collection<Realm> realm = securityManager.getRealms();
for (Realm realm2 : realm) {
SystemAuthorizingRealm userRealm = (SystemAuthorizingRealm) realm2;
RedisCache<Object, AuthenticationInfo> cache = (RedisCache<Object, AuthenticationInfo>) userRealm.getAuthenticationCache();
String keyPrefix = cache.getKeyPrefix();
for (AuthenticationInfo auth : cache.values()) {
userRealm.getAuthenticationCache().remove(auth.getPrincipals().getPrimaryPrincipal());
}
systemService.deleteAuthenticationCache(keyPrefix + user.getLoginId());
systemService.deleteAuthenticationCache(keyPrefix + user.getId());
}
}
/*if (!beanValidator(model, user)){
return form(user, model);
@@ -317,7 +331,7 @@ public class UserController extends BaseController{
for (AuthenticationInfo auth : cache.values()) {
userRealm.getAuthenticationCache().remove(auth.getPrincipals().getPrimaryPrincipal());
}
systemService.deleteAuthenticationCache(keyPrefix + user.getName());
systemService.deleteAuthenticationCache(keyPrefix + user.getLoginId());
systemService.deleteAuthenticationCache(keyPrefix + user.getId());
}

View File

@@ -0,0 +1,76 @@
package com.nis.web.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nis.domain.ScheduleCfg;
import com.nis.domain.ScheduleExceInfo;
import com.nis.domain.configuration.BaseCfg;
@MyBatisDao
public interface SchedulerDao extends CrudDao<ScheduleCfg> {
List<ScheduleCfg> findScheduleList(ScheduleCfg cfg);
/**
* 查找最新的修改数据
* @param id
* @param size
* @return
*/
List<ScheduleCfg> findNewlyCfg(@Param("id")Long id,@Param("limit")Long limit);
/**
* 更新 del_flag 字段为删除标识
* @param cfg
* @return
*/
int deleteByCompileId(ScheduleCfg cfg);
/**
* 查找 配置 下发 最新记录
* @param compileId
* @param isValid
* @return
*/
ScheduleExceInfo findScheduleExceNew(ScheduleExceInfo se);
/**
* 修改配置表状态
* @param tableName
* @param compileId
* @param isValid
* @return
*/
int updateCfgTableStatus(@Param("tableName")String tableName,@Param("compileId")Integer compileId,@Param("isValid")Integer isValid);
/**
* 查询 配置信息
* @param compileId
* @return
*/
BaseCfg getCfgTableInfo(@Param("tableName")String tableName,@Param("compileId")Integer compileId);
/**
* 保存执行记录
* @param exceInfo
* @return
*/
int insertScheduleExceLog(ScheduleExceInfo exceInfo);
/**
* 保存最新记录表
* @param exceInfo
* @return
*/
int insertScheduleExceNew(ScheduleExceInfo exceInfo);
/**
* 更新最新记录表
* @param exceInfo
* @return
*/
int updateScheduleExceNew(ScheduleExceInfo exceInfo);
}

View File

@@ -0,0 +1,315 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.nis.web.dao.SchedulerDao" >
<resultMap type="com.nis.domain.ScheduleCfg" id="scheduleCfgMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="cronValid" column="cron_valid"/>
<result property="cronInvalid" column="cron_invalid"/>
<result property="cfgId" column="cfg_id"/>
<result property="compileId" column="compile_id"/>
<result property="serviceId" column="service_id"/>
<result property="isValid" column="is_valid"/>
<result property="isAudit" column="is_audit"/>
<result property="functionId" column="function_id"/>
<result property="creatorId" column="creator_id"/>
<result property="createTime" column="create_time"/>
<result property="editorId" column="editor_id"/>
<result property="editTime" column="edit_time"/>
<result property="tableName" column="table_name"/>
<result property="userRegion1" column="user_region1"/>
<result property="userRegion2" column="user_region2"/>
<result property="userRegion3" column="user_region3"/>
<result property="userRegion4" column="user_region4"/>
<result property="userRegion5" column="user_region5"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<resultMap type="com.nis.domain.ScheduleExceInfo" id="scheduleExceInfoMap">
<id property="id" column="id"/>
<result property="scheduleId" column="schedule_id"/>
<result property="exceTime" column="exce_time"/>
<result property="issueStatus" column="issue_status"/>
<result property="issueResult" column="issue_result"/>
<result property="errorInfo" column="error_info"/>
<result property="compileId" column="compile_id"/>
<result property="isIssue" column="is_issue"/>
</resultMap>
<resultMap id="baseCfgMap" type="com.nis.domain.configuration.BaseCfg" >
<id column="cfg_id" property="cfgId" jdbcType="BIGINT" />
<result column="cfg_desc" property="cfgDesc" jdbcType="VARCHAR" />
<result column="action" property="action" jdbcType="INTEGER" />
<result column="is_valid" property="isValid" jdbcType="INTEGER" />
<result column="is_audit" property="isAudit" jdbcType="INTEGER" />
<result column="creator_id" property="creatorId" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="editor_id" property="editorId" jdbcType="INTEGER" />
<result column="edit_time" property="editTime" jdbcType="TIMESTAMP" />
<result column="auditor_id" property="auditorId" jdbcType="INTEGER" />
<result column="audit_time" property="auditTime" jdbcType="TIMESTAMP" />
<result column="service_id" property="serviceId" jdbcType="INTEGER" />
<result column="request_id" property="requestId" jdbcType="INTEGER" />
<result column="compile_id" property="compileId" jdbcType="INTEGER" />
<result column="is_area_effective" property="isAreaEffective" jdbcType="INTEGER" />
<result column="classify" property="classify" jdbcType="VARCHAR" />
<result column="attribute" property="attribute" jdbcType="VARCHAR" />
<result column="lable" property="lable" jdbcType="VARCHAR" />
<result column="area_effective_ids" property="areaEffectiveIds" jdbcType="VARCHAR" />
<result column="function_id" property="functionId" jdbcType="INTEGER" />
<result column="do_log" property="doLog" jdbcType="INTEGER" />
<result column="do_blacklist" property="doBlackList" jdbcType="INTEGER" />
</resultMap>
<sql id="scheduleCfgColumns">
a.ID,
a.NAME,
a.cron_valid,
a.cron_invalid,
a.SERVICE_ID,
a.COMPILE_ID,
a.CFG_ID,
a.IS_VALID,
a.IS_AUDIT,
a.function_id,
a.CREATOR_ID,
a.CREATE_TIME,
a.EDITOR_ID,
a.EDIT_TIME,
a.table_name,
a.user_region1,
a.user_region2,
a.user_region3,
a.user_region4,
a.user_region5
</sql>
<select id="findScheduleList" resultMap="scheduleCfgMap">
select
<include refid="scheduleCfgColumns"/>
from schedule_cfg a
<where>
del_Flag = #{DEL_FLAG_NORMAL}
<if test="id != null">
and id = #{id}
</if>
<if test="compileId != null">
and compile_id = #{compileId}
</if>
<if test="isValid != null">
and IS_VALID = #{isValid}
</if>
<if test="isAudit != null">
and IS_AUDIT = #{isAudit}
</if>
<if test="compileId != null">
and CFG_ID = #{cfgId}
</if>
<if test="functionId != null">
and function_id = #{functionId}
</if>
<if test="tableName != null and tableName != ''">
and table_name = #{tableName}
</if>
<!-- 动态where条件 -->
<if test=" whereStr != null and whereStr !=''">
${whereStr}
</if>
</where>
order by a.id
</select>
<!-- 查找最新的更新数据 -->
<select id="findNewlyCfg" resultMap="scheduleCfgMap">
select
a.ID,
a.NAME,
a.cron_valid,
a.cron_invalid,
a.SERVICE_ID,
a.COMPILE_ID,
a.CFG_ID,
a.IS_VALID,
a.IS_AUDIT,
a.CREATOR_ID,
a.CREATE_TIME,
a.EDITOR_ID,
a.EDIT_TIME,
a.table_name,
a.user_region1,
a.user_region2,
a.user_region3,
a.user_region4,
a.user_region5
from schedule_cfg a
<where>
del_Flag = 1
and id > #{id}
</where>
order by a.id
limit #{limit}
</select>
<insert id="insert" parameterType="com.nis.domain.ScheduleCfg" useGeneratedKeys="true" keyProperty="id" >
insert into schedule_cfg (
NAME,
cron_valid,
cron_invalid,
SERVICE_ID,
COMPILE_ID,
CFG_ID,
IS_VALID,
IS_AUDIT,
function_id,
CREATOR_ID,
CREATE_TIME,
EDITOR_ID,
EDIT_TIME,
table_name,
user_region1,
user_region2,
user_region3,
user_region4,
user_region5
) values (
#{name,jdbcType=VARCHAR},
#{cronValid,jdbcType=VARCHAR},
#{cronInvalid,jdbcType=VARCHAR},
#{serviceId,jdbcType=INTEGER},
#{compileId,jdbcType=INTEGER},
#{cfgId,jdbcType=INTEGER},
#{isValid,jdbcType=INTEGER},
#{isAudit,jdbcType=INTEGER},
#{functionId,jdbcType=INTEGER},
#{creatorId,jdbcType=INTEGER},
#{createTime,jdbcType=TIMESTAMP},
#{editorId,jdbcType=INTEGER},
#{editTime,jdbcType=TIMESTAMP},
#{tableName,jdbcType=VARCHAR},
#{userRegion1,jdbcType=VARCHAR},
#{userRegion2,jdbcType=VARCHAR},
#{userRegion3,jdbcType=VARCHAR},
#{userRegion4,jdbcType=VARCHAR},
#{userRegion5,jdbcType=VARCHAR}
)
</insert>
<!-- 根据 compileId 将定时任务失效,定时任务的修改策略为:删除之前的所有配置,新增 -->
<update id="deleteByCompileId" parameterType="com.nis.domain.ScheduleCfg">
update schedule_cfg
<set>
<if test="editorId != null ">
editor_Id = #{editorId,jdbcType=VARCHAR},
</if>
<if test="editTime != null ">
edit_Time = #{editTime,jdbcType=TIMESTAMP},
</if>
del_flag = #{DEL_FLAG_DELETE}
</set>
WHERE compile_Id = #{compileId} and del_flag =1
</update>
<!-- 查找 配置 下发 最新记录 -->
<select id="findScheduleExceNew" resultMap="scheduleExceInfoMap" >
SELECT
id,
schedule_id,
exce_time,
issue_status,
issue_result,
error_info,
compile_id,
is_issue
FROM
schedule_exce_new
WHERE
compile_id = #{compileId} and issue_status = #{isValid}
</select>
<!-- 修改配置表状态 -->
<update id="updateCfgTableStatus">
update ${tableName} set is_valid = #{isValid} ,is_audit = 1 where compile_id = #{compileId}
</update>
<!-- 查询最新的配置状态 -->
<select id="getCfgTableInfo" resultMap="baseCfgMap">
select * from ${tableName} where compile_id = #{compileId};
</select>
<!-- 保存执行记录 -->
<insert id="insertScheduleExceLog" parameterType="com.nis.domain.ScheduleExceInfo">
INSERT INTO schedule_exce_log (
schedule_id,
exce_time,
issue_status,
issue_result,
error_info,
compile_id,
is_issue
) VALUES (
#{scheduleId},
#{exceTime},
#{issueStatus},
#{issueResult},
#{errorInfo},
#{compileId},
0
);
</insert>
<!-- 保存最新记录表 -->
<insert id="insertScheduleExceNew" parameterType="com.nis.domain.ScheduleExceInfo">
INSERT INTO schedule_exce_new (
schedule_id,
exce_time,
issue_status,
issue_result,
error_info,
compile_id,
is_issue
) VALUES (
#{scheduleId},
#{exceTime},
#{issueStatus},
#{issueResult},
#{errorInfo},
#{compileId},
0
);
</insert>
<!-- 更新最新记录表 -->
<update id="updateScheduleExceNew" parameterType="com.nis.domain.ScheduleExceInfo">
UPDATE schedule_exce_new
<set>
<if test="scheduleId != null">
schedule_id = #{scheduleId},
</if>
<if test=" exceTime != null">
exce_time = #{exceTime},
</if>
<if test=" issueResult != null">
issue_result = #{issueResult},
</if>
<if test=" errorInfo != null">
error_info = #{errorInfo},
</if>
<if test=" isIssue != null">
is_issue = #{isIssue},
</if>
</set>
WHERE
compile_Id = #{compileId} and issue_status = #{issueStatus}
</update>
</mapper>

View File

@@ -29,7 +29,6 @@ public interface AsnGroupInfoDao extends CrudDao<AsnGroupInfo> {
List<AsnGroupInfo> findAsnGroupInfos();
Long getCount();
void modifyIssuedIp(AsnGroupInfo info);
List<AsnGroupInfo> findAsnGroupInfoByAsnGroup(AsnGroupInfo asnGroupInfo);
void updateIsUsedAndIsValid(@Param("asnNos")List asnNos,@Param("isUsed")Integer isUsed,@Param("isValid")Integer isValid);
List<AsnGroupInfo> findAsnGroupInfoByAsnNos(@Param("asnNos")List asnNos,@Param("isUsed")Integer isUsed);
void updateIpNum(@Param("v4Num")long v4Num,@Param("v6Num")long v6Num,@Param("groupId")Integer groupId);
List<Object[]> getASNIPNum(@Param("asnNo")Integer asnNo);
}

View File

@@ -15,12 +15,10 @@
<result column="editor_id" property="editorId" jdbcType="INTEGER" />
<result column="asn_id" property="asnId" jdbcType="BIGINT" />
<result column="issued_ips" property="issuedIPs" jdbcType="INTEGER" />
<result column="is_used" property="isUsed" jdbcType="INTEGER" />
<result column="region_id" property="regionId" jdbcType="INTEGER" />
</resultMap>
<sql id="AsnGroupInfoColumns">
r.id,r.group_id,r.compile_id,r.organization,r.country,r.detail,r.is_valid,r.create_time,r.edit_time,
r.creator_id,r.editor_id,r.asn_id,r.issued_ips,r.is_used,r.region_id
r.creator_id,r.editor_id,r.asn_id,r.issued_ips
</sql>
<!-- 查出所有 有效数据-->
@@ -81,7 +79,7 @@
<select id="findAsnGroupInfos" resultMap="AsnGroupInfoMap">
SELECT
<include refid="AsnGroupInfoColumns"/>
FROM asn_group_info r where r.is_valid !=-1
FROM asn_group_info r where is_valid !=-1
</select>
<select id="getCount" resultType="java.lang.Long">
SELECT count(1)
@@ -89,20 +87,7 @@
</select>
<insert id="insert" parameterType="com.nis.domain.basics.AsnGroupInfo" >
insert into asn_group_info(
group_id,
compile_id,
organization,
country,
detail,
is_valid,
creator_id,
create_time,
editor_id,
edit_time,
asn_id,
is_used,
region_id
insert into asn_group_info(group_id,compile_id,organization,country,detail,is_valid,creator_id,create_time,editor_id,edit_time,asn_id
)values (
#{groupId,jdbcType=INTEGER},
#{compileId,jdbcType=INTEGER},
@@ -114,9 +99,7 @@
#{createTime,jdbcType=TIMESTAMP},
#{editorId,jdbcType=INTEGER},
#{editTime,jdbcType=TIMESTAMP},
#{asnId,jdbcType=INTEGER},
#{isUsed,jdbcType=INTEGER},
#{regionId,jdbcType=INTEGER}
#{asnId,jdbcType=INTEGER}
)
</insert>
@@ -154,12 +137,6 @@
<if test="editTime != null and editTime != ''" >
edit_time = #{editTime,jdbcType=TIMESTAMP},
</if>
<if test="isUsed != null" >
is_used = #{isUsed,jdbcType=INTEGER},
</if>
<if test="regionId != null" >
region_id = #{regionId,jdbcType=INTEGER},
</if>
</trim>
</set>
<where>
@@ -170,28 +147,6 @@
</trim>
</where>
</update>
<update id="updateIsUsedAndIsValid" >
update asn_group_info
<set >
<if test="isUsed != null" >
is_used = #{isUsed,jdbcType=INTEGER},
</if>
<if test="isValid != null" >
is_valid = #{isValid,jdbcType=INTEGER},
</if>
</set>
<where>
<if test="asnNos != null" >
and asn_id in
<foreach collection ="asnNos" item="asnId" separator ="," open="(" close=")">
#{asnId}
</foreach >
</if>
<if test="isValid != null" >
and is_valid != #{isValid,jdbcType=INTEGER}
</if>
</where>
</update>
<update id="updateValid" parameterType="com.nis.domain.basics.AsnGroupInfo" >
update asn_group_info
<set >
@@ -250,7 +205,7 @@
<select id="getByGroupId" resultType="com.nis.domain.basics.AsnGroupInfo">
select <include refid="AsnGroupInfoColumns"/>
from asn_group_info r
where r.group_id =#{groupId} and r.is_valid !=-1
where r.group_id =#{groupId} and is_valid !=-1
</select>
<select id="getGroupInfoByName" resultType="com.nis.domain.basics.AsnGroupInfo">
select <include refid="AsnGroupInfoColumns"/>
@@ -288,13 +243,13 @@
SELECT
<include refid="AsnGroupInfoColumns"/>
FROM
asn_group_info r WHERE r.group_id = #{groupId,jdbcType=INTEGER} AND r.is_valid !=-1
asn_group_info r WHERE group_id = #{groupId,jdbcType=INTEGER} AND is_valid !=-1
</select>
<select id="getConfigGroupInfoByName" resultType="com.nis.domain.basics.AsnGroupInfo">
SELECT
<include refid="AsnGroupInfoColumns"/>
FROM
asn_group_info r WHERE r.organization = #{organization,jdbcType=VARCHAR} AND r.is_valid !=-1
asn_group_info r WHERE organization = #{organization,jdbcType=VARCHAR} AND is_valid !=-1
</select>
<select id="getValidConfigGroupInfoByName" resultType="com.nis.domain.basics.AsnGroupInfo">
SELECT
@@ -323,49 +278,17 @@
asn_group_info r
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="organization != null and organization != ''" >
AND r.organization = #{organization,jdbcType=VARCHAR}
AND organization = #{organization,jdbcType=VARCHAR}
</if>
<if test="asnId != null" >
AND r.asn_id = #{asnId,jdbcType=INTEGER}
AND asn_id = #{asnId,jdbcType=INTEGER}
</if>
</trim>
</select>
<select id="findAsnGroupInfoByAsnGroup" resultMap="AsnGroupInfoMap">
SELECT
<include refid="AsnGroupInfoColumns"/>
FROM
asn_group_info r
<where>
<if test="asnId != null" >
AND r.asn_id = #{asnId,jdbcType=INTEGER}
</if>
<if test="isUsed != null" >
AND r.is_used = #{isUsed,jdbcType=INTEGER}
</if>
<if test="organization != null and organization != ''" >
AND r.organization = #{organization,jdbcType=VARCHAR}
</if>
<if test="isValid != null" >
AND r.is_valid = #{isValid,jdbcType=VARCHAR}
</if>
</where>
</select>
<select id="findAsnGroupInfoByAsnNos" resultMap="AsnGroupInfoMap">
SELECT
<include refid="AsnGroupInfoColumns"/>
FROM
asn_group_info r
<where>
<if test="isUsed != null" >
AND r.is_used = #{isUsed,jdbcType=INTEGER}
</if>
<if test="asnNos != null" >
and r.asn_id in
<foreach collection ="asnNos" item="asnId" separator ="," open="(" close=")">
#{asnId}
</foreach >
</if>
</where>
</select>
<update id="updateIpNum" >
update asn_group_info set v4_num=#{v4Num},v6_num=#{v6Num} where group_id=#{groupId}
</update>
<select id="getASNIPNum" resultType="map">
select v4_num,v6_num from asn_group_info where asn_id=#{asnNo}
</select>
</mapper>

View File

@@ -4,7 +4,6 @@ import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nis.domain.basics.AsnGroupInfo;
import com.nis.domain.basics.AsnIpCfg;
import com.nis.domain.basics.Varibles;
import com.nis.web.dao.CrudDao;
@@ -21,7 +20,6 @@ public interface AsnIpCfgDao extends CrudDao<AsnIpCfg>{
public List<Integer> hasASNIds(@Param("ids")String ids);
public List<Integer> hasASNIpAddrs(@Param("ids")String ids);
public List<AsnIpCfg> findAllList(AsnIpCfg cfg);
public List<AsnIpCfg> findAllListByAsnGroup(@Param("entity")AsnIpCfg entity,@Param("asnGroups")List<AsnGroupInfo> asnGroups,@Param("asnIds")String asnIds);
// public List<ConfigGroupInfo> findPolicyGroupInfosByType(@Param("groupId")Integer groupId);
public List<Integer> findOtherIps(@Param("groupId")Integer groupId,@Param("cfgId")Integer cfgId);
public List<Integer> countValidIPs(@Param("groups")String groups,@Param("ids")String ids);
@@ -34,5 +32,6 @@ public interface AsnIpCfgDao extends CrudDao<AsnIpCfg>{
public int hasValidAsnIp(@Param("asnId")Long asnNo);
public AsnIpCfg getOne(AsnIpCfg cfg);
public void updateAsn(@Param("asnId")String asnNo,@Param("organization")String organization,@Param("country")String country,@Param("detail")String detail);
public void updateAsnIpByAsnGroups(@Param("entity")AsnIpCfg entity,@Param("asnGroups")List<AsnGroupInfo> asnGroups,@Param("asnIds")String asnIds);
public List<Object[]> findAllAsnIpCfgList();
public int deleteByAsnIdAndIpType(@Param("asnId")String ids,@Param("ipType")Integer ipType);
}

View File

@@ -184,6 +184,9 @@
<if test="detail != null">
AND r.detail like concat(concat('%',#{detail,jdbcType=VARCHAR}),'%')
</if>
<if test="userRegion1 != null">
AND r.user_region1 like concat(concat('%',#{userRegion1,jdbcType=VARCHAR}),'%')
</if>
<!-- 数据范围过滤 -->
${sqlMap.dsf}
@@ -308,26 +311,6 @@
AND r.asn_ip_group =#{asnIpGroup}
</if>
</select>
<select id="findAllListByAsnGroup" resultMap="asnIpCfgMap">
select
<include refid="columns"></include>
from asn_ip_cfg r
<where>
and is_valid=#{entity.isValid,jdbcType=INTEGER}
and is_audit=#{entity.isAudit,jdbcType=INTEGER}
<if test=" asnGroups != null">
and r.user_region1 in
<foreach collection ="asnGroups" item="asnGroup" separator ="," open="(" close=")">
#{asnGroup.asnId,jdbcType=INTEGER}
</foreach >
</if>
<if test=" asnIds != null and asnIds !=''">
and r.user_region1 in (select asn_id from asn_group_info where asn_id in(${asnIds}) and is_used=0)
</if>
</where>
</select>
<select id="getByIds" resultMap="asnIpCfgMap">
select
<include refid="columns"></include>
@@ -647,26 +630,20 @@
<!-- left join policy_group_info d on r.asn_ip_group = d.service_group_id -->
where r.CFG_ID in (${ids})
</select>
<update id="updateAsnIpByAsnGroups" >
update asn_ip_cfg set
<if test=" asnIds != null and asnIds !=''">
is_valid=#{entity.isValid} ,
is_audit=#{entity.isAudit},
</if>
AUDITOR_ID = #{entity.auditorId,jdbcType=INTEGER}
,AUDIT_TIME = #{entity.auditTime,jdbcType=TIMESTAMP}
<where>
<if test=" asnGroups != null">
and user_region1 in
<foreach collection ="asnGroups" item="asnGroup" separator ="," open="(" close=")">
#{asnGroup.asnId,jdbcType=INTEGER}
</foreach >
</if>
<if test=" asnIds != null and asnIds !=''">
and user_region1 in (select asn_id from asn_group_info where asn_id in(${asnIds}) and is_used=0)
</if>
</where>
</update>
<select id="findAllAsnIpCfgList" resultType="map">
select
<include refid="columns"></include>
from asn_ip_cfg r
where r.is_valid !=-1
</select>
<delete id="deleteByAsnIdAndIpType" >
delete from asn_ip_cfg
<where>
and user_region1 in(${asnId})
<if test="ipType != null" >
and ip_type = #{ipType,jdbcType=INTEGER}
</if>
</where>
</delete>
</mapper>

View File

@@ -251,18 +251,20 @@
</trim>
</select>
<!-- 查出所有 有效数据-->
<select id="findPolicyByGroupInfoList" resultMap="PolicyGroupInfoMap">
<!-- 查出所有 有效数据-->
<select id="findPolicyByGroupInfoList" resultMap="PolicyGroupInfoMap">
SELECT
<include refid="PolicyGroupInfoColumns"/>
<trim prefix="," prefixOverrides=",">
, s.name as creator_name
,e.name as editor_name
</trim>
FROM policy_group_info r
left join sys_user s on r.creator_id=s.id
left join sys_user e on r.editor_id=e.id
where r.CFG_ID in (${ids})
FROM
policy_group_info r
left join sys_user s on r.creator_id=s.id
left join sys_user e on r.editor_id=e.id
WHERE
r.group_id IN (${ids})
</select>

View File

@@ -136,6 +136,7 @@
<result column="ratelimit" property="ratelimit" jdbcType="VARCHAR" />
<result column="function_id" property="functionId" jdbcType="INTEGER" />
<result column="do_log" property="doLog" jdbcType="INTEGER" />
<result column="user_region5" property="userRegion5" jdbcType="VARCHAR" />
</resultMap>
<resultMap id="AppTopicDomainCfgMap" type="com.nis.domain.configuration.AppTopicDomainCfg" >
<id column="cfg_id" property="cfgId" jdbcType="BIGINT" />
@@ -410,7 +411,7 @@
r.CREATOR_ID,r.CREATE_TIME,r.EDITOR_ID,r.EDIT_TIME,r.AUDITOR_ID,r.AUDIT_TIME,
r.SERVICE_ID,r.REQUEST_ID,r.COMPILE_ID,r.IS_AREA_EFFECTIVE,r.CLASSIFY,
r.ATTRIBUTE,r.LABLE,r.AREA_EFFECTIVE_IDS,r.RATELIMIT,r.FUNCTION_ID,r.CFG_TYPE,r.CFG_REGION_CODE,
r.DOMAIN,r.EXPR_TYPE,r.MATCH_METHOD,r.IS_HEXBIN,r.DO_LOG
r.DOMAIN,r.EXPR_TYPE,r.MATCH_METHOD,r.IS_HEXBIN,r.DO_LOG,r.USER_REGION5
</sql>
<sql id="AppTopicDomainCfg_Column" >
@@ -1818,11 +1819,11 @@
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,RATELIMIT,FUNCTION_ID,CFG_TYPE,CFG_REGION_CODE,
DOMAIN,EXPR_TYPE,MATCH_METHOD,IS_HEXBIN,DO_LOG
DOMAIN,EXPR_TYPE,MATCH_METHOD,IS_HEXBIN,DO_LOG,USER_REGION5
)values (
<include refid="AppCommonCfg_Value_List" />,
#{cfgKeywords,jdbcType=VARCHAR},#{exprType,jdbcType=INTEGER},#{matchMethod,jdbcType=INTEGER},
#{isHexbin,jdbcType=INTEGER},#{doLog,jdbcType=INTEGER}
#{isHexbin,jdbcType=INTEGER},#{doLog,jdbcType=INTEGER},#{userRegion5,jdbcType=VARCHAR}
)
</insert>
<insert id="insertAppDomainCfgBatch" parameterType="com.nis.domain.configuration.AppDomainCfg" >
@@ -2424,6 +2425,9 @@
<if test="doLog != null" >
do_log = #{doLog,jdbcType=INTEGER},
</if>
<if test="userRegion5 != null" >
USER_REGION5 = #{userRegion5,jdbcType=INTEGER},
</if>
</trim>
</set>
where cfg_id = #{cfgId,jdbcType=BIGINT}

Some files were not shown because too many files have changed in this diff Show More