一、基本原理
Acegi認證授權(quán)主要基于兩大技術(shù),一是Filter機制,二是AOP的攔截機制。通過FilterSecurityInterceptor很好地實現(xiàn)了對URI的保護,通過MethodSecurityInterceptor實現(xiàn)了對Service的方法的攔截保護,通過ACL 實現(xiàn)了對prototype類型的Object進行過濾和保護。
二、基本概念
HttpSessionContextIntegrationFilter 存儲SecurityContext in HttpSession
ChannelProcessingFilter 重定向到另一種協(xié)議,如http到https
ConcurrentSessionFilter 因為不使用任何SecurityContextHolder的功能,但是需要更新SessionRegistry來表示當(dāng)前的發(fā)送請求的principal,通過在web.xml中注冊Listener監(jiān)聽Session事件,并發(fā)布相關(guān)消息,然后由SessionRegistry獲得消息以判斷當(dāng)前用戶的Session數(shù)量。
AuthenticationProcessingFilter 普通認證機制(大多數(shù)用這個)
CasProcessingFilter CAS認證機制
BasicProcessingFilter Http協(xié)議的Basic認證機制
HttpRequestIntegrationFilter Authentication 從容器的HttpServletRequest.getUserPrincipal()獲得
JbossIntegrationFilter 與Jboss相關(guān)。
SecurityContextHolderAwareRequestFilter 與servlet容器結(jié)合使用。
RememberMeProcessingFilter 基于Cookies方式進行認證。
AnonymousProcessingFilter 匿名認證。
ExceptionTranslationFilter 捕獲所有的Acegi Security 異常,這樣要么返回一個HTTP錯誤響應(yīng)或者加載一個對應(yīng)的AuthenticationEntryPoint
AuthenticationEntryPoint 認證入口
三、Acegi認證授權(quán)流程
1、FilterToBeanProxy 負責(zé)代理請求給FilterChainProxy
2、FilterChainProxy 方便的將多個Filter串聯(lián)起來,如上面基本概念中提到的各種Filter,當(dāng)然如果對URI進行授權(quán)保護,也可以包含F(xiàn)ilterSecurityInterceptor。注意各Filter的順序。
3、AbstractSecurityInterceptor 調(diào)度中心。負責(zé)調(diào)用各模塊完成相應(yīng)功能。
FilterSecurityInterceptor 對URI進行攔截保護
AspectJSecurityInterceptor 對方法進行攔截保護
MethodSecurityInterceptor 對方法進行攔截保護
4、AuthenticationManager 用戶認證
-> AuthenticationProvider 實際進行用戶認證的地方(多個)。
-> UserDetailsService 返回帶有GrantedAuthority的UserDetail或者拋出異常。
5、AccessDecisionManager(UnanimousBased/AffirmativeBased/ConsensusBased) 授權(quán)
-> AccessDecisionVoter(RoleVoter/BaseAclEntryVoter) 實際投票的Voter(多個).
6、RunAsManager 變更GrantedAuthority
7、AfterInvocationManager 變更返回的對象
-> BaseInvocationProvider 實際完成返回對象變更的地方(多個)。
凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
、轉(zhuǎn)載請注明來處和原文作者。非常感謝。