年剛過,還很懶,這個東東年前都開始關注了,今天把學習成果總結一下。
acegi,乙個安全系統,***和面向介面的程式設計方式,支援acl、jaas基於spring.我的理解其價值在於:replace container-managed authentication,將安全這一塊脫離具體j2ee容器,將來需要遷移時少一些麻煩,它足夠強大,可以給web系統甚至cs應用提供足夠的安全保護機制。這是乙個常用的輪子,造得不錯喲。
不過,acegi的學習曲線很陡峭,在web.xml配置了一堆的filter之後,還需要配置spring的bean,仍然是一堆,好在先跑起了demo(0.6.1 quick-start)增加了一點信心。
2 accessdecissionmanager 用於授權乙個特定的操作,這裡有乙個授權策略問題,三個實現類分別為:
affirmativebased 只需有乙個投票贊成即可通過(最常用);allowifallabstaindecisions屬性值預設為false,意思是如果所有的授權投票是都是棄權,則通不過授權檢查。
consensusbased 需要大多數投票贊成即可通過;
unanimousbased 需要所有的投票贊成才能通過(悲觀吧)。
3 objectdefinitionsource 描述角色與資源的匹配方式。
以上三個bean裝配成為乙個filterinvocationinterceptor,它將用來組裝securityenforcementfilter,之後的bean先不考慮了,因為擴充套件時用不到,照抄即可。
例子是比較簡易的,要想讓應用在實際專案中,首先需要解決以下兩個問題:
1 基於資料庫的使用者認證,一般是使用者名稱+密碼,我的作法是:
1.1 使你的user(pojo或domain object)實現acegi中的這個介面:userdetails,當然,如果你不想這麼作,也可以加乙個中間層,包裝一下啦。
這個介面只有乙個方法 public grantedauthority getauthorities();即返回該使用者的角色列表.
1.2 自己實現這個介面passwordauthenticationdao,不管你用hibernate還是ibatis.
public userdetails loaduserbyusernameandpassword(string username, string password);
很明顯,需要從資料庫中驗證使用者名稱和口令。
1.3 開始裝配:
2 例子中url和角色的匹配關係也是固定的,如下:
convert_url_to_lowercase_before_***parison
pattern_type_apache_ant
/admin/**=role_admin
/contract.do*=role_***
如果這一塊也需要從database中取,可以這麼來實現:新建乙個類extending pathbasedfilterinvocationdefinitionmap,
使用其addsecureurl來增加匹配資訊。我寫的是乙個超簡單的類,只為說明問題:
package ***.head.acegisecurity;
import ***.sf.acegisecurity.intercept.web.pathbasedfilterinvocationdefinitionmap;
import ***.sf.acegisecurity.configattributedefinition;
import ***.sf.acegisecurity.configattribute;
public class cjobjectdefinitionsource extends
pathbasedfilterinvocationdefinitionmap
class myconfigattribute implements configattribute}}
然後配置:
最後,再說一下,acegi確實是乙個優秀的安全框架,靈活強大,即使你用不上它,也可以從它的設計中汲取靈感。
acegi的認證過程
authenticationmanager是認證核心介面,其作用是驗證客戶端輸入端使用者名稱是否正確 這個介面只有乙個方法 code public authentication authenticate authentication authentication throws authenticat...
Acegi 01 Acegi安全系統介紹
1acegi安全系統介紹 acegi始於 2003年晚期,當時在spring developers郵件列表中有人提問是否有人考慮提供乙個基於spring的安全實現。當時,srping的社群是相對比較小的 尤其是和今天相比!實際上spring本身也是2003年早期才作為乙個sourceforge專案出...
acegi中的cache配置
通過讀acegi的原始碼,更加體會到 基於介面 的設計給擴充套件帶來巨大的靈活性。在bean配置中,有以下內容 這個usercache,acegi給出了乙個預設的ehcache的實現,如果你不設該屬性,預設使用nullusercache,使用者登入後,每進入乙個url,系統都會通過dao訪問一次資料...