1. 程式人生 > >【Shiro許可權管理】1.Shiro簡介

【Shiro許可權管理】1.Shiro簡介

一、簡介
在Web系統中我們經常要涉及到許可權問題,例如不同角色的人登入系統,他操作的功能、按鈕、選單是各不相同的,這就是所謂的許可權。
Apache Shiro是Java的一個安全(許可權)框架,Shiro可以完成認證、授權、加密、會話管理、Web整合、快取等功能。適用於JavaSE和JavaEE。

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

官網下載:http://shiro.apache.org/
登入上述網站,可以下載Shiro開發包與文件:


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的架構從外部看如下圖:

其中Application Code代表應用程式的程式碼,當一個使用者去訪問應用程式時,Shiro會生成一個該使用者Subject物件,代表的是“current User”,即當前使用者物件。而下面的Shiro SecurityManager是一個“大管家”的角色,它管理著Shiro的各個元件,而與Subject的所有互動都會委託給SecurityManager。其實Subject僅僅是一個“門面”,SecurityManager才是實際的執行者。
當我們需要訪問一些安全資料的時候,需要使用到Realm,它相當於Shiro的一個DataSource。Shiro會從Realm中獲取安全資料(如使用者、角色、許可權),就是說SecurityManager要驗證使用者身份,需要從Realm中獲取相應的使用者進行比較以確定使用者身份是否合法;也需要從Realm中得到使用者相應的角色、許可權進行驗證使用者是否能進行操作。

(2)從內部看Shiro

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