天天看點

【Shiro權限管理】1.Shiro簡介

一、簡介

在Web系統中我們經常要涉及到權限問題,例如不同角色的人登入系統,他操作的功能、按鈕、菜單是各不相同的,這就是所謂的權限。

Apache Shiro是Java的一個安全(權限)架構,Shiro可以完成認證、授權、加密、會話管理、Web內建、緩存等功能。适用于JavaSE和JavaEE。

關于安全架構,還有一個Spring Security架構,不過目前使用率比較高的還是Apache Shiro。

官網下載下傳:http://shiro.apache.org/

登入上述網站,可以下載下傳Shiro開發包與文檔:

【Shiro權限管理】1.Shiro簡介

Shiro的基本功能點如下圖所示:

【Shiro權限管理】1.Shiro簡介

Shiro的最主要的功能分别是Authentication、Authorization、Session Management、Cryptography、Web Support、Caching、Concurency、Testing、Run As、Remember Me。分别解釋一下上面的主要功能:

(1)Authentication

即是“認證”功能,說白了登入。我們可以利用Shiro實作登入效果,通過Shiro幫我們完成密碼比對的工作。

(2)Authorization

即是“授權”功能,當我們點一個連結或按鈕的時候,Shiro會幫我們判斷操作者有沒有權限通路該服務。

(3)Session Management

即是“會話管理”功能,在Web系統下(即JavaEE)環境下,是對Http的Session進行托管。而在JavaSE下是由Shiro單獨提供一種Session機制。

(4)Cryptography

即是“加密”功能,我們可以很容易的使用Shiro為密碼進行“加鹽”加密。

(5)Web Support

對于Web進行支援。Shiro可以很容易的與JavaEE工程進行內建。

(6)Concurency

在多線程的情況下,來進行授權認證。例如在一個線程中開啟另外一個線程,能把權限自動傳播過去。

(7)Caching

Shiro的緩存子產品,讓系統的授權機制運作速度更快。

(8)Run As

讓已經登入的使用者,以另外一個使用者的身份來操作目前的項目和系統。

(9)Remember Me

即“記住我”,是一個十分常見的功能,即是一次登入後,下次再次通路則不需要登入。

(10)Testing

Shiro提供測試支援。

二、Shiro架構

(1)從外部看Shiro

Shiro的架構從外部看如下圖:

【Shiro權限管理】1.Shiro簡介

其中Application Code代表應用程式的代碼,當一個使用者去通路應用程式時,Shiro會生成一個該使用者Subject對象,代表的是“current User”,即目前使用者對象。而下面的Shiro SecurityManager是一個“大管家”的角色,它管理着Shiro的各個元件,而與Subject的所有互動都會委托給SecurityManager。其實Subject僅僅是一個“門面”,SecurityManager才是實際的執行者。

當我們需要通路一些安全資料的時候,需要使用到Realm,它相當于Shiro的一個DataSource。Shiro會從Realm中擷取安全資料(如使用者、角色、權限),就是說SecurityManager要驗證使用者身份,需要從Realm中擷取相應的使用者進行比較以确定使用者身份是否合法;也需要從Realm中得到使用者相應的角色、權限進行驗證使用者是否能進行操作。

(2)從内部看Shiro

Shiro的架構從内部看如下圖:

【Shiro權限管理】1.Shiro簡介

最上層的是我們的各種語言編寫的應用程式,而這些應用程式都是通過Subject與Shiro進行互動的,而Subject就是與整個SecurityManager打交道。

對于整個SecurityManager,包括以下元件:

1.Subject:代表任何與應用程式發送互動的使用者。

2.SecurityManager:相當于SpringMVC的Dispatcher,是Shiro的心髒。所有互動都會通過SecurityManager進行控制,它管理着所有Subject,且負責進行認證、授權、會話以及緩存的管理。

3.Authenticator:負責Subject認證,是一個拓展點,可以自定義實作。可以使用認證政策(Authentication Strategy),即在什麼情況下算使用者認證通過了。

4.Authorizer:授權器,即通路控制器,用來決定主體是否有權進行相應的操作,即控制着使用者能通路應用中的哪些功能。

5.Realm:安全實體資料源。即是提供安全資料的源頭,資料源可以是JDBC操作的資料庫資料,也可以是緩存中的資料。該實體由使用者提供,一般在應用中都需要實作自己的Realm。可以有一個或者多個Realm。

6.SessionManager:管理Session生命周期的元件。Shiro不僅僅可以在Web環境,也可以在普通的JavaSE環境中。

7.CacheManager:緩存控制器,來管理如使用者、角色、權限等資訊的緩存。由于這些資料基本上很少發生變動,是以存放在緩存中可以提供通路的性能。

8.Cryptography:密碼子產品。Shiro提供了一些常見的加密元件用于密碼的加密/解密。

以上就是關于Shiro的簡介。

轉載請注明出處:http://blog.csdn.net/acmman/article/details/78233564

繼續閱讀