五?FAQ?
5.1 FAQ
- Q: ? 能否脫離Spring框架來使用Acegi?
A:? 雖然Acegi 沒有要求必須使用Spring Framework,但事實上Acegi很大程度上利用了Spring的IOC和AOP,很難脫離Spring的單獨使用。
- Q:? Acegi有對xfire的支持嗎?
A: 有,詳見http://jira.codehaus.org/browse/XFIRE-389
- Q: 為何無論怎么設置都返回到登陸頁面無法成功登陸?
A:? 檢查登陸頁面或登陸失敗頁面是否只有ROLE_ANONYMOUS權限
5.2 Acegi 補習班
要了解Acegi,首先要了解以下幾個重要概念:
-
Authentication
Authentication對象包含了principal, credentials 和 authorities(authorities要賦予給principal的),同時也可以包含一些附加的認證請求信息,如TCP/IP地址和Session id等。
-
SecurityContextHolder
SecurityContextHolder包含ThreadLocal私有屬性用于存取SecurityContext, SecurityContext包含Authentication私有屬性, 看以下一段程序
public void getSecurityContextInformations() {
??SecurityContext sc = SecurityContextHolder.getContext();
??Authentication auth = sc.getAuthentication();
??Object principal = auth.getPrincipal();
??if (principal instanceof UserDetails) {
???
???String password = ((UserDetails) principal).getPassword();
???
???String username = ((UserDetails) principal).getUsername();
???
???GrantedAuthority[] authorities = ((UserDetails) principal).getAuthorities();
???for (int i = 0; i < authorities.length; i++) {
????String authority = authorities[i].getAuthority();
???}
??}
??Object details = auth.getDetails();
??if (details instanceof WebAuthenticationDetails) {
???
???String SessionId = ((WebAuthenticationDetails) details).getSessionId();
??}
?}
-
AuthenticationManager
通過Providers驗證在當前 ContextHolder中的Authentication對象是否合法。
-
AccessDecissionManager
經過投票機制來審批是否批準操作
-
RunAsManager
當執行某個操作時,RunAsManager可選擇性地替換Authentication對象
-
Interceptors
攔截器(如FilterSecurityInterceptor,JoinPoint,MethodSecurityInterceptor等)用于協調授權,認證等操作
大盤預測
國富論
posted on 2007-09-12 14:46
華夢行 閱讀(148)
評論(0) 編輯 收藏