黃偉 阮惠華 喬文文 陳曉慶 王沛東
(廣東省氣象探測數(shù)據(jù)中心 廣東省廣州市 510000)
氣象業(yè)務(wù)網(wǎng)是為氣象行業(yè)人員的內(nèi)部門戶網(wǎng)站[1],為了進一步促進防災(zāi)預(yù)警工作[2],氣象資料的逐步開放成為趨勢[3],氣象業(yè)務(wù)網(wǎng)作為重要的氣象資料產(chǎn)品展示平臺[4],也越來越收到行業(yè)外的數(shù)據(jù)使用者關(guān)注,但是氣象業(yè)務(wù)網(wǎng)本身包含的內(nèi)容并不適合完全對外開放,例如內(nèi)部的應(yīng)急通告[5]、未訂正的預(yù)報數(shù)據(jù)、內(nèi)部的決策數(shù)據(jù)、未經(jīng)審核的地圖等等[6],如果對外開發(fā)將造成公眾的誤解,甚至嚴重的會引發(fā)嚴重的公共事件,因此,氣象業(yè)務(wù)網(wǎng)的訪問控制成為迫切的需求。
本文采用了Ehcache 作為菜單配置的緩存,作為菜單容器,能有效的提高加載速度,同時避免了用戶角色過度導(dǎo)致的內(nèi)存溢出。Ehcache 是一種廣泛使用的開源Java 分布式緩存。主要面向通用緩存,Java EE 和輕量級容器。它具有內(nèi)存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,一個gzip 緩存servlet 過濾器,支持REST 和SOAP api 等特點。
在原有的后臺管理系統(tǒng)界面上能添加、修改、刪除IP 范圍,把IP 范圍與用戶角色綁定;同時,設(shè)計用戶角色編輯頁面,定義用戶角色的訪問權(quán)限,界面原型如圖1所示。
針對外部單位,重新設(shè)計訪問的首頁門戶,去除部分敏感或與系統(tǒng)管理相關(guān)的功能顯示,例如:省局知網(wǎng)入口,血緣圖,搜索,相關(guān)鏈接等等。重新布局訪問首頁。如圖2所示。
根據(jù)IP 范圍顯示菜單,在業(yè)務(wù)網(wǎng)中,涉及到菜單顯示的相關(guān)位置有多個,在權(quán)限控制中,每個菜單顯示采用一致的加載方法,獲得一致的菜單顯示,通過測試業(yè)務(wù)網(wǎng)菜單顯示的相關(guān)位置,確認系統(tǒng)的有效性,具體相關(guān)位置有:頭部菜單、頭部菜單、綜合菜單、一級菜單頁、左側(cè)菜單、功能搜索。
圖1
圖2
圖3
圖4
圖5
后臺管理系統(tǒng)添加IP 菜單管理,數(shù)據(jù)庫添加一張表IP 角色配置表 T_Y_ MENU_IP_CONFIG,主要目的為根據(jù)IP 范圍界定IP 的角色。將ipv4 分為四個數(shù)值段,每個數(shù)值段設(shè)定上下界值,通過條件查詢比對,可以判斷IP 是否在IP 范圍段,通過構(gòu)建紅黑樹索引,對IP 對應(yīng)角色快速查詢,以達到快速加載界面的需求。表結(jié)構(gòu)如表1所示。
新增角色表T_Y_RULE,目的為界定角色信息的菜單權(quán)限信息,菜單信息采用長字符的形式描述。在每次系統(tǒng)加載或者角色表格發(fā)生數(shù)據(jù)更新時,系統(tǒng)將自動加載角色表格,由角色菜單自動生成菜單配置的xml 文件,加入到ehcatch 緩存中。其表格設(shè)計如表2所示:
針對廣東省氣象業(yè)務(wù)網(wǎng)的原有加載流程,基于該流程的改造,達到業(yè)務(wù)切換的平滑性,原業(yè)務(wù)網(wǎng)菜單生成流程如圖3所示。
(1)系統(tǒng)啟動,WebPageHelper 菜單緩存初始化;
圖7
(2)加載數(shù)據(jù)庫菜單配置;
(3)更新從WebPageHelper 菜單緩存;
(4)當頁面訪問時,從WebPageHelperd 菜單緩存中獲取菜單配置,解析為菜單。
通過分析該流程,方案加上IP 控制后流程,主要有兩點變化:一是系統(tǒng)存在了多個菜單配置,多個菜單配置添加到MenuCacheService 緩存,二是在頁面加載中,添加用戶的IP 判斷,通過判斷角色的id,從MenuCacheService中獲取對應(yīng)id的菜單選項。新的流程如圖4所示。
(1)系統(tǒng)啟動,WebPageHelper 菜單緩存初始化;
(2)加載數(shù)據(jù)庫菜單配置;
(3)更新從WebPageHelper 菜單緩存;
(4)查詢數(shù)據(jù)庫IP 范圍配置,預(yù)處理處理每種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 范圍菜單進行預(yù)處理。保存在MeunCache.cacheManager 靜態(tài)對象中,對于每個角色,以e(ALL_MENU|HEADE|NAVS+ 角色id, 對象集合)方式保存在cache中,菜單對象為List
表1
表2
圖8
圖9
圖10
(6)當頁面訪問時,WebPageHelperd 從MenuCacheService 查詢ip,獲取緩存,解析為菜單。
總體流程歸納如圖7所示。
綜合菜單和首頁中間導(dǎo)航是讀取接口數(shù)據(jù)生成頁面的。idexaction 通過判斷session 的角色信息是否為空,為空則為默認用戶。主要是把角色信息更新到session。同時,考慮到廣東省氣象業(yè)務(wù)網(wǎng)服務(wù)于全省氣象單位,為了避免地市局用戶使用進入的角色用戶的限制頁面,本系統(tǒng)在角色判斷前,優(yōu)先進行地市局用戶的信息判斷,從而正確加載地市局業(yè)務(wù)網(wǎng)門戶界面。其具體加載流程如圖8所示。
圖11
對于用戶的頻繁操作網(wǎng)頁中,系統(tǒng)可獲取用戶訪問IP,為了避免頻繁查詢數(shù)據(jù)庫,對用戶進行角色判斷,通常在一次會話中,用戶的角色信息保存在session中,除了用戶首次訪問需要查詢數(shù)據(jù)庫,其余訪問可直接從session 中獲取角色信息,具體流程如圖9所示。
功能上,實現(xiàn)對外部單位的訪問控制,對外部單位安角色分類,同時,為了減少對省局與市局用戶的影響,該功能設(shè)計為業(yè)務(wù)網(wǎng)的獨立訪問分支。
性能上,為了到用戶角色的快速判斷,建立有效的分類模型,通過一次性的訪問數(shù)據(jù)庫,訓(xùn)練分類模型,使系統(tǒng)在判斷用戶時,無需頻繁訪問數(shù)據(jù)庫,對于已判斷的用戶,及時把用戶信息保存在用戶會話信息中,性能指標上,要求首頁加載的總時間少于100ms。
對與菜單控制訪問的用戶,業(yè)務(wù)網(wǎng)對頁面進行了重新的設(shè)計,重新設(shè)計訪問的首頁門戶,去除部分敏感數(shù)據(jù)鏈接或與系統(tǒng)管理相關(guān)的功能顯示,例如:省局知網(wǎng)入口,血緣圖,搜索,相關(guān)鏈接等等。重新調(diào)整,優(yōu)化布局訪問首頁。如圖10所示。
對用戶的IP 進行角色判斷,是基于業(yè)務(wù)網(wǎng)原有地市級IP 判斷的功能基礎(chǔ)上開發(fā)的,并且在首頁加載中,重復(fù)的運用了系統(tǒng)緩存,不必頻繁訪問業(yè)務(wù)網(wǎng)數(shù)據(jù)庫。有效的提高了業(yè)務(wù)網(wǎng)的訪問速度。通過jmeter 的并發(fā)訪問測試,50 個訪問線程,循環(huán)10 次,在2s 內(nèi)訪問,其響應(yīng)速度為100ms 以內(nèi)。遠遠高于項目考核指標。如圖11所示。