王勝東
(中鐵信弘遠(yuǎn)(北京)軟件科技有限責(zé)任公司, 北京 100038)
基于OSGi和用戶權(quán)限的客戶端集成研究
王勝東
(中鐵信弘遠(yuǎn)(北京)軟件科技有限責(zé)任公司, 北京 100038)
鐵路調(diào)度信息系統(tǒng)包括多個(gè)業(yè)務(wù)場景,每個(gè)場景的應(yīng)用架構(gòu)涵蓋瀏覽器/服務(wù)器(B/ S)模式和客戶端/服務(wù)器(C/S)模式,將不同場景應(yīng)用在客戶端進(jìn)行集成是當(dāng)前的主要問題。OSGi技術(shù)為客戶端集成提供了通用的解決方案。開發(fā)OSGi插件進(jìn)行既有應(yīng)用的集成,在插件啟動類中進(jìn)行系統(tǒng)界面加載;根據(jù)用戶對系統(tǒng)集成的需求,對用戶權(quán)限進(jìn)行統(tǒng)一的管理和分配;根據(jù)用戶權(quán)限,OSGi框架進(jìn)行應(yīng)用的啟動加載,從而實(shí)現(xiàn)既有應(yīng)用系統(tǒng)的整合,并且按照權(quán)限內(nèi)容實(shí)現(xiàn)功能定制。
鐵路調(diào)度信息系統(tǒng);OSGi;訪問控制;客戶端集成
鐵路調(diào)度信息系統(tǒng)負(fù)責(zé)鐵路運(yùn)輸業(yè)務(wù)的調(diào)度信息化管理,支持運(yùn)輸業(yè)務(wù)中的資源調(diào)度工作。運(yùn)輸調(diào)度業(yè)務(wù)系統(tǒng)管理范圍復(fù)雜,需要多項(xiàng)資源進(jìn)行綜合協(xié)調(diào)管理;按照調(diào)度業(yè)務(wù)事前計(jì)劃、事中監(jiān)控、事后統(tǒng)計(jì)的方式,將調(diào)度業(yè)務(wù)場景分為計(jì)劃場景、指揮場景、統(tǒng)計(jì)場景、非常規(guī)事件處理時(shí)的命令場景,在這樣4個(gè)場景情況下,就可以進(jìn)行整體應(yīng)用的劃分和規(guī)劃。在當(dāng)前的業(yè)務(wù)系統(tǒng)中,不同的應(yīng)用場景采取了不同的應(yīng)用架構(gòu)模式,對于調(diào)度命令、生產(chǎn)指揮等需要進(jìn)行及時(shí)響應(yīng)場景,采用C/S模式;對于統(tǒng)計(jì)分析、計(jì)劃報(bào)表等數(shù)據(jù)統(tǒng)計(jì)顯示場景,采用B/S模式。
調(diào)度信息系統(tǒng)應(yīng)用是基于Java語言開發(fā)的,OSGi為系統(tǒng)的集成提供了統(tǒng)一的解決方案。通過OSGi插件開發(fā),進(jìn)行已有系統(tǒng)的集成;使用OSGi生命周期API函數(shù),可以在已開發(fā)插件中進(jìn)行既有系統(tǒng)的加載,從而充分利用既有系統(tǒng)代碼。對于不同的用戶,其系統(tǒng)集成權(quán)限是不一致的;基于不同的用戶需求,進(jìn)行用戶權(quán)限的統(tǒng)一管理,實(shí)現(xiàn)系統(tǒng)的統(tǒng)一集成。
OSGi委員會成立于1999年,當(dāng)前最新版本OSGi規(guī)范為2012年發(fā)布的第5版。OSGi定義了動態(tài)的Java模塊系統(tǒng),利用OSGi可以更好的控制代碼結(jié)構(gòu),進(jìn)行模塊的生命周期管理,降低系統(tǒng)的耦合性。OSGi框架如圖1所示,安全層基于Java 2安全機(jī)制構(gòu)建,并且進(jìn)行了某些空白的補(bǔ)充。模塊層定義了Java模塊化模型,彌補(bǔ)了Java部署模型的一些缺點(diǎn),模塊層嚴(yán)格定義了插件之間共享或者隱藏Java包的規(guī)則。生命周期層為插件提供了生命周期API函數(shù),定義了插件的安裝、更新、卸載等行為。服務(wù)層為Java插件開發(fā)者提供了動態(tài)的編程模型,實(shí)現(xiàn)了服務(wù)的實(shí)現(xiàn)與接口的分離。
圖1 OSGi框架結(jié)構(gòu)
Java語言本身是有模塊化概念的,但是Java語言的模塊化基本上是基于面向?qū)ο笳Z言為基礎(chǔ)的,一般只能使用訪問控制符(如public、private)來進(jìn)行訪問權(quán)限的設(shè)定;一旦設(shè)置為public,就會暴露過多的實(shí)現(xiàn)細(xì)節(jié)。當(dāng)多個(gè)JAR文件一起工作時(shí),常常會引起“類路徑地獄”問題,主要是某一個(gè)JAR文件中的類與另外一個(gè)JAR文件中的類版本不一致導(dǎo)致的;在大規(guī)模系統(tǒng)開發(fā)中,諸如日志記錄或XML解析等經(jīng)常存在不同版本。而且標(biāo)準(zhǔn)的Java環(huán)境很難實(shí)現(xiàn)動態(tài)的插件升級管理。OSGi架構(gòu)對上述問題提供了很好的解決方案,使用模塊化機(jī)制對應(yīng)用進(jìn)行了邏輯、物理的封裝,使用生命周期函數(shù)進(jìn)行插件的動態(tài)管理。
采用基于角色的權(quán)限管理,其權(quán)限分配模型如圖 2所示。
圖2 基于角色的權(quán)限分配
基于角色的用戶授權(quán)可以解決用戶權(quán)限的集中管理問題,如圖2的角色1、角色2、角色3,在實(shí)際的調(diào)度業(yè)務(wù)系統(tǒng)中,經(jīng)常會根據(jù)調(diào)度員負(fù)責(zé)的業(yè)務(wù)工作,將具體工作設(shè)置為具體崗位,對每一個(gè)具體崗位的應(yīng)用權(quán)限進(jìn)行統(tǒng)一分配,把用戶與具體角色進(jìn)行關(guān)聯(lián)實(shí)現(xiàn)用戶授權(quán)。還有一種情況如圖2中的用戶2,調(diào)度業(yè)務(wù)中常常存在輪換崗位的需求,需要在不同的崗位之間進(jìn)行工作調(diào)換,這種情況需要對一個(gè)用戶分配多個(gè)角色,在用戶登錄系統(tǒng)時(shí)進(jìn)行角色選擇,再進(jìn)行用戶權(quán)限分配。
在進(jìn)行系統(tǒng)集成過程中,將用戶權(quán)限分為兩類,用戶界面權(quán)限和應(yīng)用功能權(quán)限。用戶界面權(quán)限是指在系統(tǒng)加載的過程中,需要加載的界面內(nèi)容;應(yīng)用功能權(quán)限是指在系統(tǒng)使用過程中,具體的業(yè)務(wù)操作范圍。
圖3 用戶權(quán)限分類
如圖3所示,類似崗位的用戶如行調(diào)1和行調(diào)2,因?yàn)榫唧w業(yè)務(wù)操作完全相同,需要加載相同的界面;但是其管理范圍不一樣,行調(diào)1管理哈爾濱、沈陽、北京、太原、呼和浩特5個(gè)鐵路局,而行調(diào)2管理鄭州、武漢、西安、濟(jì)南、上海5個(gè)鐵路局。這是兩類不同類型的權(quán)限內(nèi)容,用戶界面權(quán)限在系統(tǒng)開發(fā)設(shè)計(jì)階段進(jìn)行設(shè)定,在后期系統(tǒng)運(yùn)行階段調(diào)整范圍不大,只有在系統(tǒng)更新或升級時(shí)才進(jìn)行改變。應(yīng)用功能權(quán)限需要根據(jù)業(yè)務(wù)的變動進(jìn)行相應(yīng)的改變,完成對于業(yè)務(wù)功能調(diào)整的支持。進(jìn)行權(quán)限的分類管理,可以方便系統(tǒng)的集成和功能內(nèi)容的調(diào)整。
根據(jù)用戶的界面權(quán)限,進(jìn)行相應(yīng)的OSGi插件開發(fā)。將插件開發(fā)與應(yīng)用開發(fā)分離,降低兩者之間的關(guān)聯(lián),采用了Java反射技術(shù)進(jìn)行關(guān)聯(lián)分拆。
具體的實(shí)現(xiàn)代碼如圖 4所示,在反射技術(shù)的支持下,插件開發(fā)時(shí)不知道需要加載頁面的具體類名,可以在系統(tǒng)運(yùn)行時(shí)進(jìn)行動態(tài)的配置和調(diào)整,降低系統(tǒng)之間的耦合性,保持插件開發(fā)與應(yīng)用開發(fā)的獨(dú)立性。
圖4 使用反射獲得Swing Composite類
在客戶端框架啟動過程中,首先會根據(jù)用戶名、密碼進(jìn)行權(quán)限加載,用戶界面權(quán)限在插件中進(jìn)行初始界面的加載,應(yīng)用功能權(quán)限包含了各個(gè)子系統(tǒng)初始化條件和信息,可以在初始化過程中根據(jù)這些權(quán)限進(jìn)行系統(tǒng)初始化情況的設(shè)定。
對于B/S應(yīng)用模式,可以采用SWT中自帶的org.eclipse.swt.browser.Browser進(jìn)行Web頁面加載,從而方便多種模式的應(yīng)用集成。B/S模式的認(rèn)證方式支持兩種情況,由于在客戶端框架中進(jìn)行Browser類的URL設(shè)定,所以在設(shè)定過程中可以使用HTTP GET方式進(jìn)行用戶名、密碼的傳入,在相應(yīng)的B/S應(yīng)用中,就可以按照傳輸?shù)恼J(rèn)證信息進(jìn)行用戶權(quán)限的設(shè)定;如果采用數(shù)字證書認(rèn)證方式,只要在用戶客戶端已經(jīng)安裝了有效的數(shù)字證書,既可以通過系統(tǒng)認(rèn)證。
在進(jìn)行插件開發(fā)過程中,需要對插件的權(quán)限進(jìn)行統(tǒng)一的管理,搭建了插件管理系統(tǒng),其界面如圖5所示。在插件管理系統(tǒng)中,將插件的啟動類統(tǒng)一存儲在數(shù)據(jù)庫中,通過管理界面進(jìn)行管理,實(shí)現(xiàn)動態(tài)用戶界面加載。
圖5 插件管理界面
根據(jù)系統(tǒng)集成的設(shè)計(jì)思想,進(jìn)行了客戶端集成框架的開發(fā);OSGi框架采用了Equinox作為具體實(shí)現(xiàn),客戶端應(yīng)用集成了C/S模式的Java Swing和SWT客戶端界面,同時(shí)集成了B/S模式的Web頁面。集成場景分為命令、計(jì)劃、指揮和統(tǒng)計(jì)4個(gè)場景,每一個(gè)場景下的插件可以進(jìn)行動態(tài)的配置,其集成界面如圖6所示。
圖6 應(yīng)用系統(tǒng)集成界面
利用OSGi進(jìn)行集成時(shí),其能夠加載的插件必須事先寫在配置文件中,針對不同的用戶,最終加載的插件個(gè)數(shù)不同,提前需要安裝的插件都相同。為了方便系統(tǒng)升級和新功能添加,必須預(yù)留一部分插件,插件的使用個(gè)數(shù)和預(yù)留個(gè)數(shù)必須進(jìn)行一個(gè)合理的折中選擇。
本文對OSGi基本原理進(jìn)行了介紹,討論了OSGi進(jìn)行系統(tǒng)集成的優(yōu)勢。基于角色進(jìn)行了用戶權(quán)限的配置管理,根據(jù)具體的業(yè)務(wù)場景和權(quán)限管理需求,進(jìn)行了用戶權(quán)限的分類整理。根據(jù)鐵路調(diào)度信息系統(tǒng)所涵蓋的命令、計(jì)劃、指揮、統(tǒng)計(jì)場景進(jìn)行了系統(tǒng)分類,利用Java反射模式進(jìn)行了插件開發(fā)與應(yīng)用開發(fā)的分離,降低了系統(tǒng)的耦合性,同時(shí)兼容了瀏覽器/服務(wù)器模式和客戶端/服務(wù)器模式,實(shí)現(xiàn)了客戶端應(yīng)用系統(tǒng)的集成。
責(zé)任編輯 陳 蓉
Research on client integration based on OSGi & user privileges
WANG Shengdong
( Sinorail Hong Yuan(Beijing) Information Software Development Co., Ltd., Beijing 100038, China )
There were several scenarios in the Transportation Dispatching Information System, each scenario had own application frameworks which covered from browser/server to client/server. The different scene in the client application integration was the key issue. OSGi technology provided a general solution for the client integration. The OSGi bundles were developed to integrate applications, interfaces of existing system were loaded in the bundle activator. User privileges were managed and assigned according to requirements, the union client application platform was launched by OSGi framework and customized by user privileges.
Transportation Dispatching Information System; Open Service Gateway Initiative(OSGi); access control; client integration
U284.5∶TP39
A
1005-8451(2014)02-0029-03
2013-10-25
王勝東,工程師。