spring沒有提供j2ee安全性相關的抽象,而是單獨地使用acegi安全框架來實現應用地安全。事實上安全主要是兩個部分,認證和授權。認證就是看看使用者是不是它宣稱的人,授權就是決定已認證的使用者(以角色區分)是否有權對資源訪問和操作。acegi能對web資源和pojo進行保護,主要的元件有安全性***(abstractsecurityinterceptor)、認證管理器(authenticationmanager)、訪問決定管理器(accessdecisionmanager)和run-as管理器(runa**anager)。
acegi的認證服務主要使用兩個介面,authentication和authenticationmanager。authentication提供認證資訊,它會被傳入authenticationmanager的authenticate方法進行認證。acegi為authenticationmanager提供了實現providermanager,裡面可以指定若干provider。比如jaasauthenticationprovider可以從jaas配置中獲取資訊進行認證;passworddaoauthenticationprovider可以之間在底層持久源(如active directory,ldap)進行認證;daoauthenticationprovider借助記憶體,rdbms或xml等儲存源獲得使用者名稱密碼進行認證;casauthenticationprovider借助於yale的cas進行認證;authbyadapterprovider使用容器介面卡進行認證,比如jboss的loginmodule;runasimplauthencationprovider供被替換身份的使用者使用;remoteauthenticationprovider對遠端客戶進行認證,如hessian和burlap;testingauthenticationprovider僅僅供單元測試使用。為了取得使用者資訊,acegi提供authenticationdao介面,並提供了inmemorydaoimpl和jdbcdaoimpl實現。對這兩個實現進行配置的時候可以同時配置使用密碼加密(如md5,sha)和使用者資訊的快取時間。
web資源的授權方面,關鍵元件是accessdecisionmanager介面,acegi提供的幾個實現很有意思。consensusbased表示不考慮棄權票時並且同意票大於反對票時授權;unamimousbased表示不考慮棄權票且其他都是同意票時授權;affirmativebased表示不考慮反對票只要有同意票就授權。當然也可以自定義這些策略。具體投票人使用accessdecisionvoter介面,現成的實現有rolevoter。rolevoter只對角色名是roleprefix指定的值的角色進行投票,這裡便產生了棄權票。
真正進行認證和授權還需要借助於servlet過濾器。acegi提供了六種過濾器:channalprocessingfilter根據web資源要求決定使用http或https(通過重定向),必須在其他過濾器前;authenticationprocessfilter用於處理基本表單認證;casprocessingfilter用於處理cas認證;basicprocessingfilter用於http basic認證;autointegrationfilter能獲取儲存的使用者資訊(通常存在session裡面);securityenforcementfilter對授權作出最後決定,通過它能同filtersecurityinterceptor進行互動。
為了不使過濾器和spring耦合,可以使用filtertobeanproxy。在web.xml中配置過濾器的時候只要配置filter-calss為filtertobeanproxy,在通過init-param,把param-name為targetclass的param-value設定成相應的過濾器即可。然後在spring配置檔案中也要配置相應的過濾器並設定各自的一些屬性值。
最後acegi對pojo方法級授權使用***methodsecurityinterceptor,在spring配置檔案中配置好某些方法的的角色名即可。
啊,伸一下懶腰!對spring初步了解的小結終於告一段落。總體感覺現代軟體開發越來越可以看作一種藝術了,尤其是那些配置檔案(歸功於xml)。配置構成感覺很像畫家對一幅畫的構圖,又像作曲家把樂符放置在五線譜上的過程。配置成功後編碼變得相當簡單。然而就像作出一幅好的畫作,編出乙個好的樂章需要經過多次的嘗試甚至是挫折,要想完全掌握spring還有很長的路要走,況且這種技術變得很快,大家加油!
Acegi 01 Acegi安全系統介紹
1acegi安全系統介紹 acegi始於 2003年晚期,當時在spring developers郵件列表中有人提問是否有人考慮提供乙個基於spring的安全實現。當時,srping的社群是相對比較小的 尤其是和今天相比!實際上spring本身也是2003年早期才作為乙個sourceforge專案出...
關於acegi安全框架登陸後轉向的疑問
我想實現的要求是這樣的 有幾種不同的角色登陸使用系統,但是登陸之後根據不同的角色轉向不同的檔案,比如現在有老師和學生兩個角色,老師登陸後轉向 teacher teacher.shtml,學生登陸後轉向 student student.shtml,我看了下acegi的配置,好象只能配置乙個預設的轉向頁...
Acegi安全系統介紹
acegi是spring framework 下最成熟的安全系統,它提供了強大靈活的企業級安全服務,如完善的認證和授權機制,http資源訪問控制,method 呼叫訪問控制,access control list acl 基於物件例項的訪問控制,yale central authentication...