張國平,馬 麗
(平頂山學院 軟件學院,河南 平頂山 467000)
隨著計算機技術和網(wǎng)絡技術的不斷發(fā)展,企業(yè)級應用不斷走向成熟,J2EE平臺也越來越受人們關注,但隨著Web應用的不斷復雜化,單純使用J2EE提供的基本組件很難滿足用戶的需求,同時開發(fā)難度也比較大[1],為了降低J2EE開發(fā)難度,在Web系統(tǒng)中引入一個容器框架Spring來輔助開發(fā),該框架中的IoC技術和AOP技術可以將應用程序代碼中硬編碼邏輯剝離出來放到配置文件中從而提高應用的可維護性和組件之間的耦合度[2-3]。
然而,Spring框架并沒有提供對企業(yè)級應用系統(tǒng)安全性的支持,Acegi是基于Spring的一個開源的安全認證框架,本文對Spring框架集成Acegi安全框架進行了深入的探討,同時給出了具體的實現(xiàn)方法,從而提高了應用系統(tǒng)的靈活性,安全性,以滿足不同企業(yè)的安全需求。
Spring是一個輕量級的控制反轉(zhuǎn) (IoC)和面向切面(AOP)的開源容器框架,它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情[4-5]。然而,Spring的用途不僅限于服務器端的開發(fā)。同時可以使你能夠編寫更干凈、更可管理、并且更易于測試的代碼,并提供了對其它框架的支持[6]。
Acegi是一個基于Spring Framework的安全框架,它能夠與當前流行的Web容器無縫集成[7]。它結合Spring框架為Web系統(tǒng)提供安全和認證安全服務,包括使用攔截器、Bean Context和面向接口的編程方式。因此,Acegi安全系統(tǒng)能夠輕松地適用于復雜的安全需求。為了實現(xiàn)對Web服務的保護,Acegi框架提供了以下8個關鍵功能組件:
1)Authentication 對象,包含了 Principal,Credential和 Principal的授權信息。同時還可以包含關于發(fā)起認證請求的客戶的其他信息,如IP地址。
2)ContextHolder對象,使用ThreadLocal儲存 Authentication對象的地方。
3)AuthenticationManager, 用于認證 ContextHolder中的Authentication對象。
4)AccessDecissionManager,用于授權一個特定的操作。
5)RunAsManager,當執(zhí)行特定的操作時,用于選擇性地替換Authentication對象。
6)Secure Object攔截器,用于協(xié)調(diào) AuthenticationManager,AccessDecissionManager,RunAsManager和特定操作的執(zhí)行。
7)AfterInvocationManager, 用于在 一個 SesureObject運行結束后修改一個對象,比如從 Principal的 authorities集合中移除一些沒有訪問授權的元素.
8)AfterInvocationManager, 用于在 一個 SesureObject運行結束后修改一個對象,比如從 Principal的 authorities集合中移除一些沒有訪問授權的元素。
在當前大多數(shù)的企業(yè)級應用中通常有如下4種基本的安全需求:1)需要對服務層方法進行保護;2)需要對主體進行鑒別;3)需要對web請求進行保護;4)需要對域?qū)ο髮嵗M行保護。Acegi提供了一個通用的框架,它可以滿足上述4種企業(yè)安全級的需求。下面以Acegi在Web應用程序中應用為例,它所能做的工作包括以下幾個方面:
①在用戶訪問受保護資源之前提示用戶登錄;②鑒別用戶是否是系統(tǒng)的合法用戶;③鑒別合法用戶是否具有訪問受保護資源的權限;④通過認證并對已授權的用戶導向相應的受保護的資源;⑤當認證用戶成功登陸系統(tǒng)后,Acegi會在服務器端表示該用戶已通過認證,并且在客戶端放置一個安全Cookie,這樣,系統(tǒng)的下一個認證過程就可以直接使用該Cookie;⑥用戶注銷或退出系統(tǒng)的時候,Acegi負責銷毀服務器端保存的Session;⑦Acegi負責與不同的數(shù)據(jù)源交互,以完成對用戶信息的認證功能。
在Web工程項目中使用Spring和Acegi安全框架,首先要將Spring、Acegi相應的JAR包下載(可以到相應的官方網(wǎng)站下載),然后導入到工程中。這樣當前項目就具備了上述兩種安全框架的環(huán)境,接下來配置web.xml,該文件用來初始化工程信息的。并將Sping的Ioc容器裝載到ServletContext中,并且配置FilterToBeanProxv過濾器。接下來配置Spring的配置文件applicationcontext.xml文件,最后部署并運行項目即可。下面以畢業(yè)設計選題系統(tǒng)為例,用Spring和Acegi實現(xiàn)系統(tǒng)的安全與登陸。通過分析得出該系統(tǒng)分為:管理員,教師,學生3種角色,在用戶界面中可以實現(xiàn)上述3種用戶的登錄,要求登陸在一個界面下自動識別,而無需進行身份選擇,登陸后,他們將分別到各自的跳轉(zhuǎn)頁面。具體的實現(xiàn)步驟如下:
首先修改web.xml,增加安全控制過濾鏈:


在上述代碼中可以看出Acegi實現(xiàn)了Filter接口的FilterToBeanProxy提供一種特殊的使用Filter的方式,它委托Spring中的Bean-FilterChainProxy來完成過濾功能,這樣可以簡化web.xml的配置,并且利用Spring IOC的優(yōu)勢。FilterChainProxy包含了處理認證過程的filter列表,每個filter都有各自的功能。
接下來在 applicationContext.xml中增加 Acegi安全控制攔截器和Spring的自動代理功能實現(xiàn)AOP代理代碼配置如下:


Acegi安全框架為企業(yè)級軟件開發(fā)提供了一個強有力的、靈活的解決方案,是目前開源社區(qū)最好安全框架之一。由于Spring框架在越來越多的項目中應用,并且該框架本身沒有提供對系統(tǒng)安全方面的支持。因此基于Spring應用的Acegi安全框架的研究就顯得非常重要,對安全框架的使用過程中不需要改變原有系統(tǒng)的任何代碼,只需要通過配置文件引入即可,真正實現(xiàn)了將安全代碼從業(yè)務代碼中分離。使得業(yè)務代碼更干凈,系統(tǒng)結構更合理。
[1]王爽.基于ASSH框架的運動會信息管理系統(tǒng)設計[J].電子設計工程,2011(10):31-34.
WANG Shuang.Design of games information management system based on ASSH framework[J].Electronic Design Engineering,2011(10):31-34.
[2]劉偉,馮偉.基于SSH和Acegi的Web應用框架的設計與實現(xiàn)[J].軟件導刊,2011(7):122-124.
LIU Wei,F(xiàn)ENG Wei.Design and implementation of Web application framework based on the SSH and Acegi[J].Software Guide,2011(7):122-124.
[3]張齊,余磊.基于J2EE平臺的可配置權限系統(tǒng)的設計與實現(xiàn)[J].信息通訊技術,2008(6):31-36.
ZHANG Qi,YU Lei.The design and implementation of configurable privilege management system based on J2EE platform[J].Information and Communications Technologies,2008(6):31-36.
[4]肖杰,陳翔,何海江.基于AJAX和Struts的Web應用的設計與實現(xiàn)[J].計算機工程與設計,2009(8):1934-1938.
XIAO Jie,CHEN Xiang,HE Hai-jiang.Design and implementation of web application based on AJAX and struts[J].Computer Engineering and Design,2009(8):1934-1938.
[5]傅鸝,殷旻昊.基于Struts+Spring+Hibernate+Ajax技術的科研管理系統(tǒng)設計[J].軟件導刊,2009(1):134-136.
FU Li,YIN Min-hao.Design of science research management system based on Struts+Spring+Hibernate+Ajax technology[J].Software Guide,2009(1):134-136.
[6]諶湘倩,狄文輝,孫冬.基于SSH框架與AJAX技術的Java Web應用開發(fā)[J].計算機工程與設計,2009,10:2590-2592.
CHEN Xiang-qian,DI Wen-hui,SUN Dong.Application of Java web based on SSH and AJAX[J].Computer Engineering and Design,2009(10):2590-2592.
[7]馬 林,黃文培.RBAC的權限擴展和其在Acegi下的實現(xiàn)?[J].微計算機信息,2008(6):34-36.
MA Lin,HUANG Wen-pei.Extended model based on RBAC and its implementation on acegi framework[J].Microcomputer Information,2008(6):34-36.