摘 要:針對某大型企業的綜合業務處理系統,結合Java2核心API與擴展API進行分析,提出3種方式,從多個層面解決基于J2EE分布模型的Web應用系統的實現及該應用系統的安全問題。采用J2EE體系結構進行應用開發,構造完全不依賴平臺的系統,支持分布式事務處理,高效地開發和發布分布式應用系統。表明J2EE的安全編程模式及Weblogic Server的JNDI認證和授權的安全機制,是企業的首選構造平臺。
關鍵詞:J2EE;MVC;JAAS;JNDI
中圖分類號:TP39308 文獻標識碼:B 文章編號: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開發應用中的實現
1.1 系統設計與實現
客戶是一家大型的半導體生產企業,希望建立一個綜合業務處理系統,能將企業生產中的采購、銷售、發運、退貨等業務全部統一到一個信息平臺上,實現信息的共享,加快內部處理響應速度,針對基于B/S結構的綜合業務處理系統采用J2EE 應用中的MVC架構,如圖1所示。“JSP頁面”對應于“V”,控制類和輔助類對應于“C”;實體類和數據類對應于“M”,使用UML建模工具Rational Rose對企業系統需求進行建模分析,把業務需求轉換成用例視圖(Use Case Diagram)。然后對每個用例進行細化,對每一個用例進行分析實現它的時序圖(sequence diagram)或其他視圖,接著使用Jbuilder9等工具來完成代碼的編寫和測試工作,在編程時,根據Rose生成的UML視圖來編寫相應的代碼。
1.2 系統的構成
本系統服務器端選用BEA Web Logic Server7.0作為J2EE中間件平臺,選用Oracle8i作為RDBMS數據庫服務器。客戶端使用簡單的IE瀏覽器即可。在多層結構的應用中,BEA WebLogic Server7.0可以提供開發和利用服務器端業務邏輯的基本框架,支持分布式編程模型,提供一定程度的透明性。以下使用相關的例子都是以BEA Web Logic Server7.0和Oracle8i為例來進行說明。

2 系統中的安全問題探討
2.1 J2EE體系中的JAASJava驗證和授權
JAAS通過在應用程序和底層的驗證和授權機制之間加入一個抽象層,可以簡化涉及到Java Security包的程序開發,抽象層獨立于平臺的特性使開發人員可以使用各種不同的安全機制,而且不必修改應用程序級的代碼和其他Java Security API相似,JAAS通過一個可擴展的框架——服務提供者接口(Service Provider Interface,SPI)來保證程序獨立于安全機制。應用程序級的代碼主要處理Login Context,在Login Context下面是一組動態配置的Login Modules,Login Module使用正確的安全機制進行驗證。
JAAS可以同時在客戶端和服務器端應用程序上工作。Web Logic Sever使用JAAS在胖客戶端認證和內部認證,因此,只有客戶化Authentication Provider的開發者和遠程胖客戶端需要直接使用JAAS,瘦客戶端和在container內的胖客戶端( EJB throgh servlet )不需要直接使用JAAS。
2.2 J2EE的安全編程模式及Weblogic Server的JNDI認證和授權的安全機制 J2EE定義2種安全編程模式,一種模式稱為聲明性安全,它使用一種表單,表示應用程序的安全結構,其中包括角色、訪問控制和認證要求;另一種模式稱為編程性安全,在應用程序代碼中增加安全檢查,能夠把應用程序代碼和安全限制分開,所以通常最好選擇聲明性安全。但當聲明性安全模式不能單獨滿足安全要求時,可以在應用程序中使用編程性安全模式。因此應用程序本身必須根據用戶的要求和權限,了解安全情況并做出動態決策。
Web logic server實現JNDI認證和授權的安全機制[1,2],JNDI名字樹是經過整個Web logic Server實例的集群來復制的,這使得JNDI名字樹就像一個安全的上下文環境的跟蹤機制,在實際系統的實現中,通過JNDI服務,才能實現J2EE兩種安全編程模式的相互補充[3]。
2.3 系統中的安全問題及解決方法
2.3.1 Web層的安全問題
(1) 身份認證和安全審計
認證是確定用戶身份的過程,有用戶名/密碼結合的認證或更高級的認證。基于不同情況可供選擇的認證方法有:
① 基于密碼的認證;
② 基于表單的認證;
③ 數字證書/HTTPS認證。
文中的綜合業務處理系統采用第一種基于密碼的認證,安全審計,是需要把各個安全管理功能收集上的事件以及記錄下來的安全日志進行綜合分析,安全日志主要記錄用戶對資源的訪問過程,以及對系統的管理操作。若系統出現問題,管理人員就可以審核誰對該綜合業務處理系統做了那些操作,以便于如何進行系統恢復。
(2) 安全套接字層SSL
SSL是一個協議,它通過加密數據確保數據在傳輸中的保密性,SSL又用于認證客戶機和用戶,SSL服務是基于加密技術的,該技術把可閱讀的“普通文本”加密成不易閱讀的“密碼文本”。
(3) 會話管理
目前有幾種方法保持Session會話狀態,一種在客戶端保存Session狀態,另一種是在服務器端保存Session狀態。在客戶端保持Session狀態有幾個好處:
① 相對容易實現,如采用HTTP hidden變量或者HTTP cookies來保存會話狀態;
② 如果需要記錄的狀態量較少,工作效率相當好。
2.3.2 業務層的安全問題
(1) EJB事務的安全
EJB框架不規定特定于任何事務服務或協議的事務管理。但是規范要求把JTS的javax,transact ion,User Transaction接口提供給EJB,類似于MTS,EJB框架提供了事務的聲明界定。容器有5種屬性類別:不支持、要求、支持、要求新的、強制,通過5種屬性類別的定義,容器知道:是否在一個全局上下文中調用bean,是否在一個新事務或者已有相關聯的事務調用bean。EJB框架支持3類事務界定:一是聲明界定,在一個EJB服務器上部署bean的時候指定要求的屬性,bean可以用javax.ejb.EJB Context.set Rollback Only()方法來為回滾而標記事務;二是bean管理的界定,類似于客戶管理的界定;三是用戶管理的界定,Java客戶可使用javax.transact ion.User Transaction接口來編程界定事務。
(2) EJB方法訪問控制
訪問權限定義調用方法的一個或多個安全角色,如果調用標識是角色表示中的一個成員,容器將允許這個方法調用繼續執行。否則,EJB容器將發出一個java.rmi.RemoteException的異常信息,且禁止調用的執行。
EJB的安全角色EJB配置描述器中使用
<securityrole>
<description>the description about salesman role!
</description>
<rolename>salesman</rolename>
</securityrole>
……
<methodpermission>
< rolename>Salesman</rolename>
//第一種方式,定義要求調用者必須是Salesman組成員,才能訪問SalesEJB;
<method>
<ejbname>SalesEJB</ejbname>
<methodname>*</method/name>
</method>
//或者第二種方式,定義說明任何名字為getCustomer List的方法只能由Salesman角色的成員訪問
<method>
<ejbname>SalesEJB</ejbname>
<methodname>getCustomer List</methodname>
</method>
//或者第三種方式,采用getCustomer Data(java.lang.String)格式的方法.限定為只有Salesman角色才可以訪問;
<method>
<ejbname>SalesEJB</ejbname>
<methodname>getCustomer Data</methodname>
<methodparams>java.lang.String</methodparams></method>
</methodpermission>
至此,已經為SalesEJB定義了安全模型,其中只有適當角色才能夠訪問SalesEJB的敏感部分,但是,還沒有指定把實際的系統用戶映射到應用的安全角色,下面給出配置描述器的一個配置說明:把系統用戶john和kate映射于Salesman的安全角色,可以根據SalesEJB的安全模型,根據它的方法訪問控制表訪問相應的數據模塊。
<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()方法是一個針對上述安全模型的接口,它僅測試當前用戶是不是給定的角色的成員,getCaller Pricipal()方法返回調用者本人的信息,通常,用于對調用者本人進行安全檢查。例如:
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…
}
當EJB代碼調用is Caller In Role()方法時,它正在引用的是一個相對于Bean實例的本地邏輯角色名,這個邏輯角色名必須映射到EJB配置描述器中的一個具體角色名上,而映射關系可以通過<securityroleref>標記符實現,這個標記符包含一個選用的描述信息和一個引用的具體角色。
<securityroleref>
2.3.3 EIS層的安全問題
(1) RDBMS安全
數據庫的安全性是數據庫管理員日常工作中十分關注的一個問題,下面圍繞如何保證Oracle數據庫具有較高的安全性,使數據庫系統處于一個穩定安全的狀態進行研究。
(1) 用戶角色的管理
在本綜合業務系統中,Web logic Server使用JDBC連接Oracle數據庫,為了充分利用資源和提高訪問RDBMS的速度,服務器配置一個數據庫連接池,配置連接池時,需要指定連接RDBMS的用戶名、密碼、JDBCURL和JDBC驅動程序;在程序代碼中只使用表示數據庫連接池的JNDI名字,這樣做的好處是,調整正在使用的數據庫系統而不必要修改應用程序。
(2) 數據保護
主要是數據庫的備份,當計算機的軟硬件發生故障時,利用備份恢復被破壞的數據庫文件或控制文件或其他文件。另一種就是日志,Oracle數據庫實例都提供日志,用以記錄數據庫中所進行的各種操作,包括修改、調整參數等,在數據庫內部建立一個所有作業的完整記錄。其三是控制文件的備份,用于存儲數據庫物理結構的狀態,控制文件中的某些狀態信息在實例恢復和介質恢復期間用于引導Oracle數據庫。
(3) Oracle數據庫備份
Oracle8i數據庫的備份主要有以下幾種方式:邏輯備份、物理備份、脫機備份、聯機備份。
(4) 數據庫系統的恢復
有了上述幾種備份方法,即使計算機發生故障,如介質損壞、軟件系統異常等情況時,可以通過備份進行不同程度的恢復,使Oracle數據庫系統盡快恢復到正常狀態。
(5) 其他相關的安全問題
綜合業務系統需要和企業遺留的其他系統進行集成,充分利用已有資源,實現最大程度上資源共享。集成分3個層次:一是數據的集成,在集成之前,必須首先對數據進行標識并編成目錄,另外還要確定元數據模型。這三步完成以后,數據才能在數據庫系統中分布和共享;二是應用系統的集成,即為2個應用中的數據和函數提供接近實時的集成,在應用系統集成中,對系統的登錄、認證、審計是至關重要的;三是業務流程的集成,包括業務管理、進程模擬以及綜合任務、流程、組織和進出信息的工作流,還包括業務處理中每一步都需要的工具[4]。
如何實現系統間的無縫連接,J2EE連接器架構(JCA)對J2EE標準集做了的重要的補充,JCA包括3個關鍵的元素:JCA資源適配器、系統界面、通用客戶界面(Common Client Interface,CCI),要支持JCA的事務和安全功能需要目標程序通過資源適配器為程序的訪問提供足夠的事務和安全界面。
3 結 語
采用J2EE體系結構進行企業應用開發可以構造完全不依賴平臺的系統,并且支持分布式事務處理,可高效地開發和發布分布式應用系統,是企業的首選構造平臺。文中主要探討J2EE
技術在Web應用開發中的一系列安全問題,如身份認證、審計、會話管理、EJB事務安全、EJB方法訪問控制、數據庫安全等。針對這些問題文中給出相應的解決方案。
參 考 文 獻
[1]Michael Gridley.J2EE應用與BEA Weblogic Server [M].邢國慶,譯.北京:電子工業出版社,2002.
[2]李文舉,姜華,劉德山.基于J2EE架構的網絡課程管理系統的設計與實現[J].遼寧師范大學學報:自然科學版,2007,30(3):319321.
[3]羅新.基于Web/J2EE架構的銷售管理系統的設計與實現[J].哈爾濱商業大學學報:自然科學版,2006,22(6):8486.
[4]張靖.基于J2EE平臺的Web應用研究[J].成都大學學報:自然科學版,2006,25(4):292294.
[5]倪禮豪.基于J2EE技術的Web應用[J].微型機與應用,2007,(S1):2224.
[6]李偉群,鄔家煒,劉薇.基于J2EE的分布式Web應用系統框架設計[J].現代計算機,2007(6):5455.
[7]林青,許鎖坤.基于J2EE的企業級系統持久性框架的設計與實現[J].計算機工程與設計,2007(7):1 7321 734.
作者簡介 白國枝 女,1965年出生,河南許昌人,許昌學院網絡中心,講師。研究方向為網絡和信息安全。