摘 要:針對(duì)某大型企業(yè)的綜合業(yè)務(wù)處理系統(tǒng),結(jié)合Java2核心API與擴(kuò)展API進(jìn)行分析,提出3種方式,從多個(gè)層面解決基于J2EE分布模型的Web應(yīng)用系統(tǒng)的實(shí)現(xiàn)及該應(yīng)用系統(tǒng)的安全問(wèn)題。采用J2EE體系結(jié)構(gòu)進(jìn)行應(yīng)用開發(fā),構(gòu)造完全不依賴平臺(tái)的系統(tǒng),支持分布式事務(wù)處理,高效地開發(fā)和發(fā)布分布式應(yīng)用系統(tǒng)。表明J2EE的安全編程模式及Weblogic Server的JNDI認(rèn)證和授權(quán)的安全機(jī)制,是企業(yè)的首選構(gòu)造平臺(tái)。
關(guān)鍵詞:J2EE;MVC;JAAS;JNDI
中圖分類號(hào):TP39308 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004373X(2008)1609404
Design and Development of Security System Based on J2EE/Web Architecture
BAI Guozhi
(Center of Network,Xuchang University,Xuchang,461000,China)
Abstract:Aiming at the integrated network service system of a large enterprise,combining the Java2 core API and the expanded API to carry on the analysis,three methods are put forward,security of the realization and the Web applied system from several levels based on J2EE distribution model are resolved.Adopting the J2EE system structure to carry on the business application development,constructing the system that did not depend on platform,which supporting the distribute type business processing,the distributed application system with high efficiency is developed and released.It shows the safe programming mode of J2EE and the safe mechanism of authorization of Weblogic Server is the first choice of enterprise to choose to construct the platform.
Keywords:J2EE;MVC;JAAS;JNDI
1 J2EE在Web開發(fā)應(yīng)用中的實(shí)現(xiàn)
1.1 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
客戶是一家大型的半導(dǎo)體生產(chǎn)企業(yè),希望建立一個(gè)綜合業(yè)務(wù)處理系統(tǒng),能將企業(yè)生產(chǎn)中的采購(gòu)、銷售、發(fā)運(yùn)、退貨等業(yè)務(wù)全部統(tǒng)一到一個(gè)信息平臺(tái)上,實(shí)現(xiàn)信息的共享,加快內(nèi)部處理響應(yīng)速度,針對(duì)基于B/S結(jié)構(gòu)的綜合業(yè)務(wù)處理系統(tǒng)采用J2EE 應(yīng)用中的MVC架構(gòu),如圖1所示?!癑SP頁(yè)面”對(duì)應(yīng)于“V”,控制類和輔助類對(duì)應(yīng)于“C”;實(shí)體類和數(shù)據(jù)類對(duì)應(yīng)于“M”,使用UML建模工具Rational Rose對(duì)企業(yè)系統(tǒng)需求進(jìn)行建模分析,把業(yè)務(wù)需求轉(zhuǎn)換成用例視圖(Use Case Diagram)。然后對(duì)每個(gè)用例進(jìn)行細(xì)化,對(duì)每一個(gè)用例進(jìn)行分析實(shí)現(xiàn)它的時(shí)序圖(sequence diagram)或其他視圖,接著使用Jbuilder9等工具來(lái)完成代碼的編寫和測(cè)試工作,在編程時(shí),根據(jù)Rose生成的UML視圖來(lái)編寫相應(yīng)的代碼。
1.2 系統(tǒng)的構(gòu)成
本系統(tǒng)服務(wù)器端選用BEA Web Logic Server7.0作為J2EE中間件平臺(tái),選用Oracle8i作為RDBMS數(shù)據(jù)庫(kù)服務(wù)器??蛻舳耸褂煤?jiǎn)單的IE瀏覽器即可。在多層結(jié)構(gòu)的應(yīng)用中,BEA WebLogic Server7.0可以提供開發(fā)和利用服務(wù)器端業(yè)務(wù)邏輯的基本框架,支持分布式編程模型,提供一定程度的透明性。以下使用相關(guān)的例子都是以BEA Web Logic Server7.0和Oracle8i為例來(lái)進(jìn)行說(shuō)明。
2 系統(tǒng)中的安全問(wèn)題探討
2.1 J2EE體系中的JAASJava驗(yàn)證和授權(quán)
JAAS通過(guò)在應(yīng)用程序和底層的驗(yàn)證和授權(quán)機(jī)制之間加入一個(gè)抽象層,可以簡(jiǎn)化涉及到Java Security包的程序開發(fā),抽象層獨(dú)立于平臺(tái)的特性使開發(fā)人員可以使用各種不同的安全機(jī)制,而且不必修改應(yīng)用程序級(jí)的代碼和其他Java Security API相似,JAAS通過(guò)一個(gè)可擴(kuò)展的框架——服務(wù)提供者接口(Service Provider Interface,SPI)來(lái)保證程序獨(dú)立于安全機(jī)制。應(yīng)用程序級(jí)的代碼主要處理Login Context,在Login Context下面是一組動(dòng)態(tài)配置的Login Modules,Login Module使用正確的安全機(jī)制進(jìn)行驗(yàn)證。
JAAS可以同時(shí)在客戶端和服務(wù)器端應(yīng)用程序上工作。Web Logic Sever使用JAAS在胖客戶端認(rèn)證和內(nèi)部認(rèn)證,因此,只有客戶化Authentication Provider的開發(fā)者和遠(yuǎn)程胖客戶端需要直接使用JAAS,瘦客戶端和在container內(nèi)的胖客戶端( EJB throgh servlet )不需要直接使用JAAS。
2.2 J2EE的安全編程模式及Weblogic Server的JNDI認(rèn)證和授權(quán)的安全機(jī)制 J2EE定義2種安全編程模式,一種模式稱為聲明性安全,它使用一種表單,表示應(yīng)用程序的安全結(jié)構(gòu),其中包括角色、訪問(wèn)控制和認(rèn)證要求;另一種模式稱為編程性安全,在應(yīng)用程序代碼中增加安全檢查,能夠把應(yīng)用程序代碼和安全限制分開,所以通常最好選擇聲明性安全。但當(dāng)聲明性安全模式不能單獨(dú)滿足安全要求時(shí),可以在應(yīng)用程序中使用編程性安全模式。因此應(yīng)用程序本身必須根據(jù)用戶的要求和權(quán)限,了解安全情況并做出動(dòng)態(tài)決策。
Web logic server實(shí)現(xiàn)JNDI認(rèn)證和授權(quán)的安全機(jī)制[1,2],JNDI名字樹是經(jīng)過(guò)整個(gè)Web logic Server實(shí)例的集群來(lái)復(fù)制的,這使得JNDI名字樹就像一個(gè)安全的上下文環(huán)境的跟蹤機(jī)制,在實(shí)際系統(tǒng)的實(shí)現(xiàn)中,通過(guò)JNDI服務(wù),才能實(shí)現(xiàn)J2EE兩種安全編程模式的相互補(bǔ)充[3]。
2.3 系統(tǒng)中的安全問(wèn)題及解決方法
2.3.1 Web層的安全問(wèn)題
(1) 身份認(rèn)證和安全審計(jì)
認(rèn)證是確定用戶身份的過(guò)程,有用戶名/密碼結(jié)合的認(rèn)證或更高級(jí)的認(rèn)證?;诓煌闆r可供選擇的認(rèn)證方法有:
① 基于密碼的認(rèn)證;
② 基于表單的認(rèn)證;
③ 數(shù)字證書/HTTPS認(rèn)證。
文中的綜合業(yè)務(wù)處理系統(tǒng)采用第一種基于密碼的認(rèn)證,安全審計(jì),是需要把各個(gè)安全管理功能收集上的事件以及記錄下來(lái)的安全日志進(jìn)行綜合分析,安全日志主要記錄用戶對(duì)資源的訪問(wèn)過(guò)程,以及對(duì)系統(tǒng)的管理操作。若系統(tǒng)出現(xiàn)問(wèn)題,管理人員就可以審核誰(shuí)對(duì)該綜合業(yè)務(wù)處理系統(tǒng)做了那些操作,以便于如何進(jìn)行系統(tǒng)恢復(fù)。
(2) 安全套接字層SSL
SSL是一個(gè)協(xié)議,它通過(guò)加密數(shù)據(jù)確保數(shù)據(jù)在傳輸中的保密性,SSL又用于認(rèn)證客戶機(jī)和用戶,SSL服務(wù)是基于加密技術(shù)的,該技術(shù)把可閱讀的“普通文本”加密成不易閱讀的“密碼文本”。
(3) 會(huì)話管理
目前有幾種方法保持Session會(huì)話狀態(tài),一種在客戶端保存Session狀態(tài),另一種是在服務(wù)器端保存Session狀態(tài)。在客戶端保持Session狀態(tài)有幾個(gè)好處:
① 相對(duì)容易實(shí)現(xiàn),如采用HTTP hidden變量或者HTTP cookies來(lái)保存會(huì)話狀態(tài);
② 如果需要記錄的狀態(tài)量較少,工作效率相當(dāng)好。
2.3.2 業(yè)務(wù)層的安全問(wèn)題
(1) EJB事務(wù)的安全
EJB框架不規(guī)定特定于任何事務(wù)服務(wù)或協(xié)議的事務(wù)管理。但是規(guī)范要求把JTS的javax,transact ion,User Transaction接口提供給EJB,類似于MTS,EJB框架提供了事務(wù)的聲明界定。容器有5種屬性類別:不支持、要求、支持、要求新的、強(qiáng)制,通過(guò)5種屬性類別的定義,容器知道:是否在一個(gè)全局上下文中調(diào)用bean,是否在一個(gè)新事務(wù)或者已有相關(guān)聯(lián)的事務(wù)調(diào)用bean。EJB框架支持3類事務(wù)界定:一是聲明界定,在一個(gè)EJB服務(wù)器上部署bean的時(shí)候指定要求的屬性,bean可以用javax.ejb.EJB Context.set Rollback Only()方法來(lái)為回滾而標(biāo)記事務(wù);二是bean管理的界定,類似于客戶管理的界定;三是用戶管理的界定,Java客戶可使用javax.transact ion.User Transaction接口來(lái)編程界定事務(wù)。
(2) EJB方法訪問(wèn)控制
訪問(wèn)權(quán)限定義調(diào)用方法的一個(gè)或多個(gè)安全角色,如果調(diào)用標(biāo)識(shí)是角色表示中的一個(gè)成員,容器將允許這個(gè)方法調(diào)用繼續(xù)執(zhí)行。否則,EJB容器將發(fā)出一個(gè)java.rmi.RemoteException的異常信息,且禁止調(diào)用的執(zhí)行。
EJB的安全角色EJB配置描述器中使用
<securityrole>
<description>the description about salesman role!
</description>
<rolename>salesman</rolename>
</securityrole>
……
<methodpermission>
< rolename>Salesman</rolename>
//第一種方式,定義要求調(diào)用者必須是Salesman組成員,才能訪問(wèn)SalesEJB;
<method>
<ejbname>SalesEJB</ejbname>
<methodname>*</method/name>
</method>
//或者第二種方式,定義說(shuō)明任何名字為getCustomer List的方法只能由Salesman角色的成員訪問(wèn)
<method>
<ejbname>SalesEJB</ejbname>
<methodname>getCustomer List</methodname>
</method>
//或者第三種方式,采用getCustomer Data(java.lang.String)格式的方法.限定為只有Salesman角色才可以訪問(wèn);
<method>
<ejbname>SalesEJB</ejbname>
<methodname>getCustomer Data</methodname>
<methodparams>java.lang.String</methodparams></method>
</methodpermission>
至此,已經(jīng)為SalesEJB定義了安全模型,其中只有適當(dāng)角色才能夠訪問(wèn)SalesEJB的敏感部分,但是,還沒有指定把實(shí)際的系統(tǒng)用戶映射到應(yīng)用的安全角色,下面給出配置描述器的一個(gè)配置說(shuō)明:把系統(tǒng)用戶john和kate映射于Salesman的安全角色,可以根據(jù)SalesEJB的安全模型,根據(jù)它的方法訪問(wèn)控制表訪問(wèn)相應(yīng)的數(shù)據(jù)模塊。
<securityDroleassignment>
<rolename>Salesman</rolename>
<principalname>John</principalname>
<principalname>Kate</principalname>
</securityroleassignment>
EJB安全API僅由java.security.Principal的getCaller Principal()方法和EJB Context的isCaller In Role(String role Name)方法組成,isCaller In Role()方法是一個(gè)針對(duì)上述安全模型的接口,它僅測(cè)試當(dāng)前用戶是不是給定的角色的成員,getCaller Pricipal()方法返回調(diào)用者本人的信息,通常,用于對(duì)調(diào)用者本人進(jìn)行安全檢查。例如:
private Session Contextctx;
private String user name;
public void set Billing Address(String role Name){
If (! ctx.isCaller In Role (\"Users\") ){
throw new Security Exception(\"no so users\");
}
if(! username.equals(getCaller Principal().get Name()))
{
throw new Security Exception (\"Caller cannot access this account\" ) ;
}
//business logic…
}
當(dāng)EJB代碼調(diào)用is Caller In Role()方法時(shí),它正在引用的是一個(gè)相對(duì)于Bean實(shí)例的本地邏輯角色名,這個(gè)邏輯角色名必須映射到EJB配置描述器中的一個(gè)具體角色名上,而映射關(guān)系可以通過(guò)<securityroleref>標(biāo)記符實(shí)現(xiàn),這個(gè)標(biāo)記符包含一個(gè)選用的描述信息和一個(gè)引用的具體角色。
<securityroleref>
2.3.3 EIS層的安全問(wèn)題
(1) RDBMS安全
數(shù)據(jù)庫(kù)的安全性是數(shù)據(jù)庫(kù)管理員日常工作中十分關(guān)注的一個(gè)問(wèn)題,下面圍繞如何保證Oracle數(shù)據(jù)庫(kù)具有較高的安全性,使數(shù)據(jù)庫(kù)系統(tǒng)處于一個(gè)穩(wěn)定安全的狀態(tài)進(jìn)行研究。
(1) 用戶角色的管理
在本綜合業(yè)務(wù)系統(tǒng)中,Web logic Server使用JDBC連接Oracle數(shù)據(jù)庫(kù),為了充分利用資源和提高訪問(wèn)RDBMS的速度,服務(wù)器配置一個(gè)數(shù)據(jù)庫(kù)連接池,配置連接池時(shí),需要指定連接RDBMS的用戶名、密碼、JDBCURL和JDBC驅(qū)動(dòng)程序;在程序代碼中只使用表示數(shù)據(jù)庫(kù)連接池的JNDI名字,這樣做的好處是,調(diào)整正在使用的數(shù)據(jù)庫(kù)系統(tǒng)而不必要修改應(yīng)用程序。
(2) 數(shù)據(jù)保護(hù)
主要是數(shù)據(jù)庫(kù)的備份,當(dāng)計(jì)算機(jī)的軟硬件發(fā)生故障時(shí),利用備份恢復(fù)被破壞的數(shù)據(jù)庫(kù)文件或控制文件或其他文件。另一種就是日志,Oracle數(shù)據(jù)庫(kù)實(shí)例都提供日志,用以記錄數(shù)據(jù)庫(kù)中所進(jìn)行的各種操作,包括修改、調(diào)整參數(shù)等,在數(shù)據(jù)庫(kù)內(nèi)部建立一個(gè)所有作業(yè)的完整記錄。其三是控制文件的備份,用于存儲(chǔ)數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的狀態(tài),控制文件中的某些狀態(tài)信息在實(shí)例恢復(fù)和介質(zhì)恢復(fù)期間用于引導(dǎo)Oracle數(shù)據(jù)庫(kù)。
(3) Oracle數(shù)據(jù)庫(kù)備份
Oracle8i數(shù)據(jù)庫(kù)的備份主要有以下幾種方式:邏輯備份、物理備份、脫機(jī)備份、聯(lián)機(jī)備份。
(4) 數(shù)據(jù)庫(kù)系統(tǒng)的恢復(fù)
有了上述幾種備份方法,即使計(jì)算機(jī)發(fā)生故障,如介質(zhì)損壞、軟件系統(tǒng)異常等情況時(shí),可以通過(guò)備份進(jìn)行不同程度的恢復(fù),使Oracle數(shù)據(jù)庫(kù)系統(tǒng)盡快恢復(fù)到正常狀態(tài)。
(5) 其他相關(guān)的安全問(wèn)題
綜合業(yè)務(wù)系統(tǒng)需要和企業(yè)遺留的其他系統(tǒng)進(jìn)行集成,充分利用已有資源,實(shí)現(xiàn)最大程度上資源共享。集成分3個(gè)層次:一是數(shù)據(jù)的集成,在集成之前,必須首先對(duì)數(shù)據(jù)進(jìn)行標(biāo)識(shí)并編成目錄,另外還要確定元數(shù)據(jù)模型。這三步完成以后,數(shù)據(jù)才能在數(shù)據(jù)庫(kù)系統(tǒng)中分布和共享;二是應(yīng)用系統(tǒng)的集成,即為2個(gè)應(yīng)用中的數(shù)據(jù)和函數(shù)提供接近實(shí)時(shí)的集成,在應(yīng)用系統(tǒng)集成中,對(duì)系統(tǒng)的登錄、認(rèn)證、審計(jì)是至關(guān)重要的;三是業(yè)務(wù)流程的集成,包括業(yè)務(wù)管理、進(jìn)程模擬以及綜合任務(wù)、流程、組織和進(jìn)出信息的工作流,還包括業(yè)務(wù)處理中每一步都需要的工具[4]。
如何實(shí)現(xiàn)系統(tǒng)間的無(wú)縫連接,J2EE連接器架構(gòu)(JCA)對(duì)J2EE標(biāo)準(zhǔn)集做了的重要的補(bǔ)充,JCA包括3個(gè)關(guān)鍵的元素:JCA資源適配器、系統(tǒng)界面、通用客戶界面(Common Client Interface,CCI),要支持JCA的事務(wù)和安全功能需要目標(biāo)程序通過(guò)資源適配器為程序的訪問(wèn)提供足夠的事務(wù)和安全界面。
3 結(jié) 語(yǔ)
采用J2EE體系結(jié)構(gòu)進(jìn)行企業(yè)應(yīng)用開發(fā)可以構(gòu)造完全不依賴平臺(tái)的系統(tǒng),并且支持分布式事務(wù)處理,可高效地開發(fā)和發(fā)布分布式應(yīng)用系統(tǒng),是企業(yè)的首選構(gòu)造平臺(tái)。文中主要探討J2EE
技術(shù)在Web應(yīng)用開發(fā)中的一系列安全問(wèn)題,如身份認(rèn)證、審計(jì)、會(huì)話管理、EJB事務(wù)安全、EJB方法訪問(wèn)控制、數(shù)據(jù)庫(kù)安全等。針對(duì)這些問(wèn)題文中給出相應(yīng)的解決方案。
參 考 文 獻(xiàn)
[1]Michael Gridley.J2EE應(yīng)用與BEA Weblogic Server [M].邢國(guó)慶,譯.北京:電子工業(yè)出版社,2002.
[2]李文舉,姜華,劉德山.基于J2EE架構(gòu)的網(wǎng)絡(luò)課程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].遼寧師范大學(xué)學(xué)報(bào):自然科學(xué)版,2007,30(3):319321.
[3]羅新.基于Web/J2EE架構(gòu)的銷售管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].哈爾濱商業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2006,22(6):8486.
[4]張靖.基于J2EE平臺(tái)的Web應(yīng)用研究[J].成都大學(xué)學(xué)報(bào):自然科學(xué)版,2006,25(4):292294.
[5]倪禮豪.基于J2EE技術(shù)的Web應(yīng)用[J].微型機(jī)與應(yīng)用,2007,(S1):2224.
[6]李偉群,鄔家煒,劉薇.基于J2EE的分布式Web應(yīng)用系統(tǒng)框架設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī),2007(6):5455.
[7]林青,許鎖坤.基于J2EE的企業(yè)級(jí)系統(tǒng)持久性框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(7):1 7321 734.
作者簡(jiǎn)介 白國(guó)枝 女,1965年出生,河南許昌人,許昌學(xué)院網(wǎng)絡(luò)中心,講師。研究方向?yàn)榫W(wǎng)絡(luò)和信息安全。