無為

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

          一、基本原理
          Acegi認證授權主要基于兩大技術,一是Filter機制,二是AOP的攔截機制。通過FilterSecurityInterceptor很好地實現了對URI的保護,通過MethodSecurityInterceptor實現了對Service的方法的攔截保護,通過ACL 實現了對prototype類型的Object進行過濾和保護。

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

          ConcurrentSessionFilter 因為不使用任何SecurityContextHolder的功能,但是需要更新SessionRegistry來表示當前的發送請求的principal,通過在web.xml中注冊Listener監聽Session事件,并發布相關消息,然后由SessionRegistry獲得消息以判斷當前用戶的Session數量。

          AuthenticationProcessingFilter 普通認證機制(大多數用這個)

          CasProcessingFilter CAS認證機制

          BasicProcessingFilter Http協議的Basic認證機制

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

          JbossIntegrationFilter 與Jboss相關。

          SecurityContextHolderAwareRequestFilter 與servlet容器結合使用。

          RememberMeProcessingFilter 基于Cookies方式進行認證。

          AnonymousProcessingFilter 匿名認證。

          ExceptionTranslationFilter 捕獲所有的Acegi Security 異常,這樣要么返回一個HTTP錯誤響應或者加載一個對應的AuthenticationEntryPoint

          AuthenticationEntryPoint 認證入口

          三、Acegi認證授權流程
          1、FilterToBeanProxy 負責代理請求給FilterChainProxy

          2、FilterChainProxy 方便的將多個Filter串聯起來,如上面基本概念中提到的各種Filter,當然如果對URI進行授權保護,也可以包含FilterSecurityInterceptor。注意各Filter的順序。

          3、AbstractSecurityInterceptor 調度中心。負責調用各模塊完成相應功能。
          FilterSecurityInterceptor 對URI進行攔截保護
          AspectJSecurityInterceptor 對方法進行攔截保護
          MethodSecurityInterceptor 對方法進行攔截保護

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

          5、AccessDecisionManager(UnanimousBased/AffirmativeBased/ConsensusBased) 授權
          -> AccessDecisionVoter(RoleVoter/BaseAclEntryVoter) 實際投票的Voter(多個).

          6、RunAsManager 變更GrantedAuthority

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

           



          凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
          、轉載請注明來處和原文作者。非常感謝。

          posted on 2007-12-16 21:31 草兒 閱讀(1231) 評論(0)  編輯  收藏 所屬分類: JAVA WEB應用
          主站蜘蛛池模板: 八宿县| 罗山县| 盖州市| 屯门区| 通辽市| 弥渡县| 武城县| 石棉县| 广平县| 阳新县| 洛扎县| 金寨县| 胶南市| 永昌县| 融水| 甘南县| 伊金霍洛旗| 余姚市| 沅陵县| 古浪县| 大港区| 太原市| 临潭县| 那坡县| 潍坊市| 元氏县| 永平县| 恩施市| 台北市| 贡觉县| 德清县| 增城市| 读书| 龙游县| 云南省| 牙克石市| 方城县| 色达县| 育儿| 尼勒克县| 唐海县|