無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

          一、基本原理
          Acegi認(rèn)證授權(quán)主要基于兩大技術(shù),一是Filter機(jī)制,二是AOP的攔截機(jī)制。通過FilterSecurityInterceptor很好地實(shí)現(xiàn)了對(duì)URI的保護(hù),通過MethodSecurityInterceptor實(shí)現(xiàn)了對(duì)Service的方法的攔截保護(hù),通過ACL 實(shí)現(xiàn)了對(duì)prototype類型的Object進(jìn)行過濾和保護(hù)。

          二、基本概念
          HttpSessionContextIntegrationFilter 存儲(chǔ)SecurityContext in HttpSession
          ChannelProcessingFilter 重定向到另一種協(xié)議,如http到https

          ConcurrentSessionFilter 因?yàn)椴皇褂萌魏蜸ecurityContextHolder的功能,但是需要更新SessionRegistry來表示當(dāng)前的發(fā)送請(qǐng)求的principal,通過在web.xml中注冊(cè)Listener監(jiān)聽Session事件,并發(fā)布相關(guān)消息,然后由SessionRegistry獲得消息以判斷當(dāng)前用戶的Session數(shù)量。

          AuthenticationProcessingFilter 普通認(rèn)證機(jī)制(大多數(shù)用這個(gè))

          CasProcessingFilter CAS認(rèn)證機(jī)制

          BasicProcessingFilter Http協(xié)議的Basic認(rèn)證機(jī)制

          HttpRequestIntegrationFilter Authentication 從容器的HttpServletRequest.getUserPrincipal()獲得

          JbossIntegrationFilter 與Jboss相關(guān)。

          SecurityContextHolderAwareRequestFilter 與servlet容器結(jié)合使用。

          RememberMeProcessingFilter 基于Cookies方式進(jìn)行認(rèn)證。

          AnonymousProcessingFilter 匿名認(rèn)證。

          ExceptionTranslationFilter 捕獲所有的Acegi Security 異常,這樣要么返回一個(gè)HTTP錯(cuò)誤響應(yīng)或者加載一個(gè)對(duì)應(yīng)的AuthenticationEntryPoint

          AuthenticationEntryPoint 認(rèn)證入口

          三、Acegi認(rèn)證授權(quán)流程
          1、FilterToBeanProxy 負(fù)責(zé)代理請(qǐng)求給FilterChainProxy

          2、FilterChainProxy 方便的將多個(gè)Filter串聯(lián)起來,如上面基本概念中提到的各種Filter,當(dāng)然如果對(duì)URI進(jìn)行授權(quán)保護(hù),也可以包含F(xiàn)ilterSecurityInterceptor。注意各Filter的順序。

          3、AbstractSecurityInterceptor 調(diào)度中心。負(fù)責(zé)調(diào)用各模塊完成相應(yīng)功能。
          FilterSecurityInterceptor 對(duì)URI進(jìn)行攔截保護(hù)
          AspectJSecurityInterceptor 對(duì)方法進(jìn)行攔截保護(hù)
          MethodSecurityInterceptor 對(duì)方法進(jìn)行攔截保護(hù)

          4、AuthenticationManager 用戶認(rèn)證
          -> AuthenticationProvider 實(shí)際進(jìn)行用戶認(rèn)證的地方(多個(gè))。
          -> UserDetailsService 返回帶有GrantedAuthority的UserDetail或者拋出異常。

          5、AccessDecisionManager(UnanimousBased/AffirmativeBased/ConsensusBased) 授權(quán)
          -> AccessDecisionVoter(RoleVoter/BaseAclEntryVoter) 實(shí)際投票的Voter(多個(gè)).

          6、RunAsManager 變更GrantedAuthority

          7、AfterInvocationManager 變更返回的對(duì)象
          -> BaseInvocationProvider 實(shí)際完成返回對(duì)象變更的地方(多個(gè))。

           



          凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
          、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。

          posted on 2007-12-16 21:31 草兒 閱讀(1231) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA WEB應(yīng)用
          主站蜘蛛池模板: 囊谦县| 沁水县| 耿马| 洛宁县| 崇明县| 榆树市| 台东县| 苏尼特右旗| 紫阳县| 台南县| 龙井市| 卓尼县| 云龙县| 辽阳县| 田阳县| 科技| 河津市| 保亭| 合作市| 措美县| 沭阳县| 永清县| 甘洛县| 定远县| 朔州市| 三亚市| 郯城县| 晋城| 融水| 平和县| 三江| 丹阳市| 鹤峰县| 鄯善县| 沛县| 宜昌市| 重庆市| 贡觉县| 娱乐| 阿图什市| 永安市|