簡單又靈活的安全框架--Shiro構架和身份認證流程

Apache Shiro是一款強大易用的安全框架,它可以在任何應用環境中使用,能夠跟第三方框架良好的耦合,它的設計目標就是簡化應用程序的安全工作管理。那Shiro究竟是如何工作的?

我們先來看看架構總覽:

簡單又靈活的安全框架--Shiro構架和身份認證流程

值得一提的是Shiro不提供用戶權限的維護,而是從一個或多個配置好的Realms(相當於DAO)中尋找相關數據,來完成用戶的授權管理和身份驗證(登錄)。

一、Shiro的詳細架構

簡單又靈活的安全框架--Shiro構架和身份認證流程

(參考http://jinnianshilongnian.iteye.com/blog/2018936)

1.Subject:任何可以與應用交互的“用戶”。

2.SecurityManager:安全管理器,是Shiro的心臟,負責與其他組件的交互。

3.Authenticator:驗證是否有身份,就是平常說的登錄。

4.Authorizer:授權器,用來判斷當前用戶是否具有權限進行相關操作。

5.SessionManager:管理Session的組件。

6.CacheManager:用來管理用戶的身份,權限,角色等的緩存。

7.Cryptography:用於密碼的加密解密加鹽值操作。

8.Realm:代表一個或多個的安全實體數據源。

通過上面的各個組件我們可以完成認證、授權、會話管理、加密/解密、記住我、允許一個用戶假裝為另一個用戶等安全相關功能。

二、身份認證的流程

認證說白了就是登錄,下面的例子展示了認證的過程

簡單又靈活的安全框架--Shiro構架和身份認證流程

簡單又靈活的安全框架--Shiro構架和身份認證流程

簡單又靈活的安全框架--Shiro構架和身份認證流程

簡單又靈活的安全框架--Shiro構架和身份認證流程

整個過程其實不難,我們總結一下

1. 調用 SecurityUtils.getSubject(),獲取當前的 Subject.;

2. 調用 Subject 的 isAuthenticated() 測試有沒有登錄。

3. 若用戶沒有被登錄。則把用戶名和密碼封裝成 UsernamePasswordToken 對象

  • 創建一個表單頁面
  • 把請求提交到 SpringMVC 的 Handler
  • 獲取用戶名和密碼.

4. 調用 Subject 的 login(AuthenticationToken) 方法進行登錄操作 。

5. 自定義 Realm 的方法,從數據庫中獲取對應的記錄,返回給 Shiro。

6. Shior進行密碼比對操作。

在實際開發中,第123步其實都在Spring MVC 的Handler裡完成的,如果只需要認證的話,繼承AuthenticatingRealm.class並重寫抽象方法doGetAuthenticationInfo,進行用戶查詢,是否被鎖定,密碼加密加鹽值比對操作等。這些要怎麼做呢?敬請期待下一篇文章:

簡單又靈活的安全框架--Shiro密碼比對和授權

結尾彩蛋:

Java官方推薦使用Shiro,它較Spring Security更簡單易用,Spring自己的系列Spring side4也把權限礦建換成Shiro了.

小編是個普通的程序猿,水平有限,文章難免有錯誤,歡迎犧牲自己寶貴時間的讀者,就本文內容直抒己見,小編的目的僅僅是希望對讀者有所啟發。


分享到:


相關文章: