posts - 431,  comments - 344,  trackbacks - 0
          公告
           Don't Repeat Yourself
          座右銘:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
          公告本博客在此聲明部分文章為轉摘,只做資料收集使用。


          微信: szhourui
          QQ:109450684
          Email
          lsi.zhourui@gmail.com
          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          留言簿(15)

          隨筆分類(1019)

          文章分類(3)

          文章檔案(21)

          收藏夾

          Link

          好友博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 865091
          • 排名 - 44

          最新評論

          閱讀排行榜

          Acegi工作流程

          任何一個安全系統都包括authentication和authorization兩部分,Acegi相同。

          第一部分:authentication

          1、acegi通過AuthenticationProcessingFilter攔截login請求獲取Principal和Credential信息(通俗一點就是用戶名和密碼);

          2、驗證用戶名密碼,由這個Filter調用認證管理器AuthenticatiomManager進行驗證。

          AuthenticatiomManager本身并不具備驗證的功能,它相當與是一個驗證控制器,由它來管理驗證的過程及方式。AuthenticatiomManager是通過調用provider來進行驗證的,一個manager中可以具有多個provider,但只要有一個provider驗證通過,manager就認為驗證成功。

          這部分要明白三點:一,provider是可以配置進去的,因為acegi是基于spring的;二是AuthenticatiomManager是可以被重寫的,你可以將manager改成你自己希望的控制器;三,好好利用event,這是標準的observer模式。acegi中的設計模式研究將在以后的貼子中討論。

          3、provider進行驗證。

          provider是真正的驗證模塊,并且決定了驗證的模式。provider目前acegi提供了dao、jaas,cas,x509,ldap等幾種驗證方式,這些驗證方式的具體內容可以查閱acegi的文檔。provider驗證通過后將Authentication對象返回。

          4、AuthenticationProcessingFilter將對象保存到ContextHolder中。Authentication部分結束。

          第二部分:authorization

          1、用戶提交請求,攔截器FilterSecurityInterceptor攔截請求,攔截器是一個Filter.

          2 、鑒權,攔截器調用AccessDecisionManager進行鑒權。

          AccessDecisionManager是通過投票的方式來決定是否有權限訪問資源。所謂投票就要包括投票的參與者和投票的策略。

          投票的參與者decisionVoters,這是AccessDecisionManager的一個屬性。decisionVoter能從某一個角度決定用戶是否能訪問資源,例如RoleVoter來判斷用戶的角色是否有權限訪問資源,MaxuserVoter來決定某個資源的訪問用戶數是否已經達到了最大值等。

          投票策略。投票的策略是通過不同的AccessDecisionManager來實現的,例如acegi提供的AffirmativeBased對象,這個對象的策略就是只要有一個投票通過就全體通過。UnanimousBased對象的策略是必須全體投票通過才能通過。但在大多數情況下acegi提供的AccessDecisionManager不能滿足我們的要求,這就需要我們去實現AccessDecisionManager接口,去定制適合自己項目的策略。

          3、投票。投票對象必須實現AccessDecisionVoter接口。投票對象關注的是某一方面的決定權,如果投票通過則Vote方法來完成的。vote方法必須返回一個int型的數據代表投票結果,它們是AccessDecisionVoter的三個靜態成員屬性:ACCESS_ABSTAIN,,ACCESS_DENIED和ACCESS_GRANTED,它們分別是棄權,否決和贊成。
           

          安全攔截器

            攔截器如何工作
            MethodInvocation攔截器
            FilterInvocation攔截器

          認證

            認證請求
            認證管理器
            Authentication Provider

          授權

            Access Decision Manager
            Voting Decision Manager
            授權管理推薦

          ContextHolder的用戶接口

            用戶接口目標
            HTTP會話認證
            HTTP Basic認證
          posted on 2006-12-20 12:51 周銳 閱讀(272) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 镇雄县| 海盐县| 巴青县| 秦皇岛市| 霍林郭勒市| 垣曲县| 余江县| 富蕴县| 石楼县| 渝北区| 府谷县| 琼结县| 西青区| 盖州市| 太原市| 沽源县| 图片| 湘西| 乃东县| 定边县| 湖南省| 恩平市| 绍兴市| 塔城市| 浏阳市| 吉木萨尔县| 巫溪县| 健康| 普宁市| 湾仔区| 金坛市| 凤山县| 乐都县| 新余市| 邵阳县| 内江市| 波密县| 庄浪县| 门头沟区| 武川县| 灵寿县|