Shiro - learning 入門學習 (1)
Shiro入門學習
一 、什麼是Shiro?
看一下官網對於 what is Shiro ? 的解釋
Apache Shiro (pronounced “shee-roh”, the Japanese word for ‘castle’) is a powerful and easy-to-use Java security framework (java安全管理框架)that performs authentication(認證), authorization (授權), cryptography (加密), and session management (會話管理)and can be used to secure any application - from the command line applications, mobile applications to the largest web and enterprise applications.
通過官網的解釋,我們可以獲得一些資訊。
- Shiro是java安全管理框架
- Shiro主要可以完成authentication(認證), authorization (授權), cryptography (加密), and session management (會話管理)
- Shiro可以被用於任何應用,無論是web應用還是手機應用,命令列應用,還是企業應用。
Shiro基本功能圖
Shiro的功能不止只有認證,授權,加密,繪畫管理。還包括快取,與web整合等。
總結: Shiro是一個基於java開源免費的安全管理框架,Shiro不僅可可以在JavaSE環境下使用,也可以在JavaEE環境下使用,Shiro 可以完成認證、認證、授權、加密、繪畫管理、快取、web整合等。
二、Spring Security 和 Shiro兩者有什麼區別呢?
其實學習Shiro的時候,會很容易想起以前學過的另一種java安全管理框架,那就是Spring Security.
- 根據時間線來說的話,Spring Security出現的更早。
- Spring Security依賴Spring,但是Shiro不必依賴Spring,可選擇範圍廣
- Spring Security相對於Shiro來說,學習成本更高,更為複雜
這些區別決定了Shiro是使用範圍更廣,更靈活。因此學習Shiro還是很有必要的。
三、Shiro功能學習
- Authentication(認證)
對使用者的身份進行認證,判斷使用者是否有相應的身份。比如說,我輸入使用者名稱和密碼後,驗證我這個使用者是否存在在資料庫中。不存在那就代表,我沒有”身份“。
- Authorization (授權)
到了授權這一步的時候,使用者當然已經經過了上面的”認證“了。授權也也就是許可權驗證,驗證使用者是否有某個許可權。
比如我們訪問某視訊軟體的VIP資源的時候,那麼系統當然會驗證我們是否有許可權訪問這個資源,這就是許可權驗證。因為每個系統的許可權不一樣,有可能這個系統某些資源是隻能VIP訪問,那個系統某些資源是隻能管理員訪問。存在多樣性,那麼關於許可權驗證的規則當然就需要程式設計師自己來完成了。
- session manager (會話管理): 使用者登入就是一次會話,會話存放著使用者的資訊直到使用者退出。這裡的Session Manager和Java 中的Session概念上沒有任何關係。
- Cryptography (加密): 加密,Shiro中提供了很多中加密的具體實現,比如MD5之類的。可以很好的保護資料的安全性
- Web Support (Web 支援): Web 支援,可以非常容易的整合到Web 環境;
- Caching (快取): Shiro為了提高效率,還支援快取。比如使用者登入後,其使用者資訊不用每次去查,直接從快取中獲取
- Concurrency (多執行緒): shiro 支援多執行緒應用的併發驗證,即如在一個執行緒中開啟另一個執行緒,能把許可權自動傳播過去;
- Testing: 提供測試支援;
- Run As: 允許一個使用者假裝為另一個使用者(如果他們允許)的身份進行訪問;
- Remember Me: 記住我,一次登入後,下次再來的話不用登入了。但是必須注意的是,remember me 並不會記住使用者的具體資訊
四、Shiro框架學習
- Subject
Subject主體,是Shiro中的一個介面。Subject記錄了當前操作使用者
- SecurityManager
SecurityManager是一個介面,繼承了Authenticator, Authorizer, SessionManager這三個介面。
安全驗證器,是Shiro的核心。用來管理所有Subject的安全認證。SecurityManager可以完成對Subject的認證和授權等。實際上是SecurityManager呼叫Authenticator進行認證,通過Authorizer進行授權,通過SessionManager進行會話管理。
-
realm
Realm叫做領域,相當於是資料來源。當使用SecurityManager對Subject進行安全管理認證的時候,就需要從Realm中獲取使用者的資訊。
注意:不要把realm理解成只是從資料來源取資料,在realm中還有認證授權校驗的相關的程式碼
-
Authenticator
Authenticator即認證器,對使用者身份進行認證,Authenticator是一個介面,shiro提供ModularRealmAuthenticator實現類,通過ModularRealmAuthenticator基本上可以滿足大多數需求,也可以自定義認證器。
-
Authorizer
Authorizer即授權器,使用者通過認證器認證通過,在訪問功能時需要通過授權器判斷使用者是否有此功能的操作許可權。