天天看點

Shiro之shiro架構介紹(一)

1.shiro是什麼?

Apache Shiro是Java的一個安全架構,提供了認證、授權、加密和會話管理等功能。

2.shiro的功能介紹

其基本功能點如下圖所示:

Shiro之shiro架構介紹(一)

下面介紹一下各功能點的意思:

Authentication:身份認證/登入,驗證使用者是不是擁有相應的身份;

Authorization:授權,即權限驗證,驗證某個已認證的使用者是否擁有某個權限;就是說判斷這個使用者是否能做事情,例如:細粒度的驗證某個使用者對某個資源是否具有某個權限。

Session Management:回話管理,即使用者登入後就是一次會話,在沒有退出之前,他的所有資訊都在會話中;會話可以是javase環境,也可以是web環境。

Cryptography:加密,保護資料的安全性;例如:密碼加密存儲到資料庫,而不是明文存儲。

Web Support:web支援,可以非常容易的內建到web環境。

Caching:緩存,比如使用者登入後,使用者資訊、擁有的角色\權限不必每次都去查,都可以在緩存取,提供效率。

Concurrency:shiro支援多線程的并發驗證,即,如在一個線程中開啟另一個線程,可以把權限自動傳播過去。

Testing:提供測試支援;

Run As:允許一個使用者假裝為另一個使用者(如果他們允許)進行通路。

Remember Me:記住我,這個是非常常見的功能,即一次登入後,下次再來的話不用登入了。

最後要說的是:shiro不會去維護使用者、維護權限;這些需要開發者去設計和建立,然後通過響應的接口注入給shiro。

Shiro之shiro架構介紹(一)

從上圖可以看出:應用代碼直接互動給對象Subject,也就是說shiro對外API核心就是Subject。

其每個API的含義如下:

Subject:主體,代表目前“使用者”(這個使用者不一定是一個具體的人)與目前應用互動的任何東西都是Subject。

所有Subject都綁定到SecurityManager,與Subject的所有互動都會委托給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執行者;

SecurityManager:安全管理器,即所有關于安全的操作都會與SecurityManager互動,并且它管理者所有的Subject,可以看出它是shiro的核心,她負責與後面的其他元件進行互動。可以把他看做springmvc的DispatherServlet前端控制器。

Realm:域。shiro從realm中擷取安全資料(如使用者、角色、權限),就是說Securitymanager要驗證使用者身份,那麼它要從realm中擷取相應的使用者進行比較以确定使用者身份是否合法;也需要從realm得到使用者相應的角色/權限進行驗證使用者是否能進行操作。可以把Realm看成DataSource,即安全資料源。

簡單來說就是一下兩點:

1、應用代碼通過Subject來進行認證和授權,而Subject又委托給SecurityManager;

2、我們需要給Shiro的SecurityManager注入Realm,進而讓SecurityManager能得到合法的使用者及其權限進行判斷。

繼續閱讀