黄伟 阮惠华 乔文文 陈晓庆 王沛东
(广东省气象探测数据中心 广东省广州市 510000)
气象业务网是为气象行业人员的内部门户网站[1],为了进一步促进防灾预警工作[2],气象资料的逐步开放成为趋势[3],气象业务网作为重要的气象资料产品展示平台[4],也越来越收到行业外的数据使用者关注,但是气象业务网本身包含的内容并不适合完全对外开放,例如内部的应急通告[5]、未订正的预报数据、内部的决策数据、未经审核的地图等等[6],如果对外开发将造成公众的误解,甚至严重的会引发严重的公共事件,因此,气象业务网的访问控制成为迫切的需求。
本文采用了Ehcache 作为菜单配置的缓存,作为菜单容器,能有效的提高加载速度,同时避免了用户角色过度导致的内存溢出。Ehcache 是一种广泛使用的开源Java 分布式缓存。主要面向通用缓存,Java EE 和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip 缓存servlet 过滤器,支持REST 和SOAP api 等特点。
在原有的后台管理系统界面上能添加、修改、删除IP 范围,把IP 范围与用户角色绑定;同时,设计用户角色编辑页面,定义用户角色的访问权限,界面原型如图1所示。
针对外部单位,重新设计访问的首页门户,去除部分敏感或与系统管理相关的功能显示,例如:省局知网入口,血缘图,搜索,相关链接等等。重新布局访问首页。如图2所示。
根据IP 范围显示菜单,在业务网中,涉及到菜单显示的相关位置有多个,在权限控制中,每个菜单显示采用一致的加载方法,获得一致的菜单显示,通过测试业务网菜单显示的相关位置,确认系统的有效性,具体相关位置有:头部菜单、头部菜单、综合菜单、一级菜单页、左侧菜单、功能搜索。
图1
图2
图3
图4
图5
后台管理系统添加IP 菜单管理,数据库添加一张表IP 角色配置表 T_Y_ MENU_IP_CONFIG,主要目的为根据IP 范围界定IP 的角色。将ipv4 分为四个数值段,每个数值段设定上下界值,通过条件查询比对,可以判断IP 是否在IP 范围段,通过构建红黑树索引,对IP 对应角色快速查询,以达到快速加载界面的需求。表结构如表1所示。
新增角色表T_Y_RULE,目的为界定角色信息的菜单权限信息,菜单信息采用长字符的形式描述。在每次系统加载或者角色表格发生数据更新时,系统将自动加载角色表格,由角色菜单自动生成菜单配置的xml 文件,加入到ehcatch 缓存中。其表格设计如表2所示:
针对广东省气象业务网的原有加载流程,基于该流程的改造,达到业务切换的平滑性,原业务网菜单生成流程如图3所示。
(1)系统启动,WebPageHelper 菜单缓存初始化;
图7
(2)加载数据库菜单配置;
(3)更新从WebPageHelper 菜单缓存;
(4)当页面访问时,从WebPageHelperd 菜单缓存中获取菜单配置,解析为菜单。
通过分析该流程,方案加上IP 控制后流程,主要有两点变化:一是系统存在了多个菜单配置,多个菜单配置添加到MenuCacheService 缓存,二是在页面加载中,添加用户的IP 判断,通过判断角色的id,从MenuCacheService中获取对应id的菜单选项。新的流程如图4所示。
(1)系统启动,WebPageHelper 菜单缓存初始化;
(2)加载数据库菜单配置;
(3)更新从WebPageHelper 菜单缓存;
(4)查询数据库IP 范围配置,预处理处理每种IP 范围的菜单缓存。具体方法如图5所示。
MeunCacheDaoImpl.getIPFrom(String IP)获 取sql 为select *from T_RULE_IP_MAP where ENABLE=1 and ipv4_from_part1<= ?and ipv4_from_part2<= ? and ipv4_from_part3<= ? and ipv4_from_part4<= ? and ipv4_to_part1>= ? and ipv4_to_part2>= ? and ipv4_to_part3>= ? and ipv4_to_part4>= ?
(5)对于每种IP 范围菜单进行预处理。保存在MeunCache.cacheManager 静态对象中,对于每个角色,以e(ALL_MENU|HEADE|NAVS+ 角色id, 对象集合)方式保存在cache中,菜单对象为List
表1
表2
图8
图9
图10
(6)当页面访问时,WebPageHelperd 从MenuCacheService 查询ip,获取缓存,解析为菜单。
总体流程归纳如图7所示。
综合菜单和首页中间导航是读取接口数据生成页面的。idexaction 通过判断session 的角色信息是否为空,为空则为默认用户。主要是把角色信息更新到session。同时,考虑到广东省气象业务网服务于全省气象单位,为了避免地市局用户使用进入的角色用户的限制页面,本系统在角色判断前,优先进行地市局用户的信息判断,从而正确加载地市局业务网门户界面。其具体加载流程如图8所示。
图11
对于用户的频繁操作网页中,系统可获取用户访问IP,为了避免频繁查询数据库,对用户进行角色判断,通常在一次会话中,用户的角色信息保存在session中,除了用户首次访问需要查询数据库,其余访问可直接从session 中获取角色信息,具体流程如图9所示。
功能上,实现对外部单位的访问控制,对外部单位安角色分类,同时,为了减少对省局与市局用户的影响,该功能设计为业务网的独立访问分支。
性能上,为了到用户角色的快速判断,建立有效的分类模型,通过一次性的访问数据库,训练分类模型,使系统在判断用户时,无需频繁访问数据库,对于已判断的用户,及时把用户信息保存在用户会话信息中,性能指标上,要求首页加载的总时间少于100ms。
对与菜单控制访问的用户,业务网对页面进行了重新的设计,重新设计访问的首页门户,去除部分敏感数据链接或与系统管理相关的功能显示,例如:省局知网入口,血缘图,搜索,相关链接等等。重新调整,优化布局访问首页。如图10所示。
对用户的IP 进行角色判断,是基于业务网原有地市级IP 判断的功能基础上开发的,并且在首页加载中,重复的运用了系统缓存,不必频繁访问业务网数据库。有效的提高了业务网的访问速度。通过jmeter 的并发访问测试,50 个访问线程,循环10 次,在2s 内访问,其响应速度为100ms 以内。远远高于项目考核指标。如图11所示。