1. 程式人生 > >轉:JAVAWEB開發之許可權管理(二)——shiro入門詳解以及使用方法、shiro認證與shiro授權

轉:JAVAWEB開發之許可權管理(二)——shiro入門詳解以及使用方法、shiro認證與shiro授權

原文地址:JAVAWEB開發之許可權管理(二)——shiro入門詳解以及使用方法、shiro認證與shiro授權

以下是部分內容,具體見原文。

shiro介紹

什麼是shiro

shiro是Apache的一個開源框架,它將軟體系統的安全認證相關的功能抽取出來,實現使用者身份認證,許可權授權、加密、會話管理等功能,組成了一個通用的安全認證框架。它可以實現如下的功能:
1.驗證使用者
2.對使用者執行訪問控制,如:判斷使用者是否具有角色admin,判斷使用者是否擁有訪問的資源許可權。
3.在任何環境下使用SessionAPI。例如C/S程式
4.可以使用多個使用者資料源。例如一個是Oracle資料庫,另外一個是MySQL資料庫。
5.單點登入(SSO)功能
6."Remember Me"服務,類似於購物車的功能,shiro官方建議開啟。
為何使用shiro?

因為shiro將安全認證相關的功能抽取出來組成了一個框架,因此使用shiro就可以非常快速的完成認證、授權等功能的開發,降低系統成本。
shiro使用廣泛,shiro可以執行在web應用,非web應用,叢集分散式應用中越來越多的使用者開始使用shiro.
Spring中有Spring security(原名Acegi), 是一個許可權框架,它和Spring的依賴過於緊密,沒有shiro使用簡單。shiro不依賴於Spring,而shiro就相對獨立最主要是因為shiro使用簡單‘靈活,所以現在越來越多的使用者選擇shiro。
shiro核心組成部分


shiro的4大組成部分——身份認證,授權,會話管理和加密
Authentication:身份驗證(身份認證),簡稱"登入"。
Authorization:授權,給使用者給使用者分配角色或者許可權資源。
Session Manager:使用者Session管理器,可以讓C/S程式也使用Session來控制權限。
Cryptography:將JDK中複雜的密碼加密方式進行封裝。
除了以上功能,shiro還提供很多擴充套件功能:
Web Support:主要針對web應用提供一些常用功能。
Caching:快取可以使程式執行更有效率。
Concurrency:多執行緒相關功能。
Testing:幫助我們進行測試相關的功能。
"Run As":一個允許使用者假設為另一個使用者身份(如果允許)的功能,有時候在管理指令碼時很有用。
"Remember  Me":記住使用者身份,提供類似購物車的功能。
shiro執行大致流程:


Subject——主體,是與程式進行互動的物件,可以是人也可以是服務或其他程式,通常理解為使用者。所有的Subject例項都必須繫結到一個SecurityManager上。我們與Subject互動,執行時shiro會自動轉化為與SecurityManager互動的特定的subject的互動。
SecurityManager——SecurityManager是shiro的核心,初始化時協調各個模組執行。然而,一旦SecurityManager協調完畢,SecurityManager會被單獨留下,且我們只需要去操作Subject即可,無需操作SecurityManager。但是需要了解的是當我們與一個Subject進行互動時,實質上是SecurityManager在處理Subject的安全操作。
Realms——Realms在shiro中作為程式和安全資料之間的"橋樑"或"聯結器"。它用於獲取安全資料來判斷subject是否能夠登入,subject擁有什麼許可權。有點類似於DAO。在配置realms時,需要至少一個realm。而且shiro提供了一些常用的Realms來連線資料來源,如LDAP資料來源的JndiLdapRealm,JDBC資料來源的JdbcRealm,ini檔案資料來源的iniRealm,Properties檔案資料來源的PropertiesRealm,等等,我們也可以插入自己的Realm實現來代表自定義的資料來源。像其他元件一樣,Realms也是由SecurityManager控制。
shiro架構


Subject:(org.apache.shiro.subject.Subject)  即主體,簡稱使用者,主體既可以是使用者也可以是程式,主體訪問系統,系統需要對主體進行認證、授權。外部應用與subject進行互動,Subject記錄了當前操作使用者,將使用者的概念理解為當前操作的主體,可能是一個通過瀏覽器請求的使用者,也可能是一個執行的程式。Subject在shiro中是一個介面,介面中定義了很多認證授權相關的方法,外部程式通過subject進行認證授權,而Subject是通過SecurityManager安全管理器進行認證授權。
SecurityManager:(org.apache.shiro.mgt.SecurityManager)如上所述,SecurityManager是shiro的核心,協調shiro的各個元件。SecurityManager就是安全管理器,負責對全部的subject進行安全管理。通過SecurityManager可以完成Subject的認證、授權等,實質上SecurityManager是通過Authenticator對主體進行認證,通過Authorizer對主體進行授權,通過SessionManager進行會話管理等等。SecurityManager是一個介面,繼承了Authenticator,Authorizer,SessionManager這三個介面。
Authenticator:(org.apache.shiro.authc.Authenticator) 即認證器,對使用者身份進行認證,Authenticator是一個介面,shiro提供ModularRealmAuthenticator實現類,通過ModularRealmAuthenticator基本上可以滿足大多數需求,也可以自定義認證器。
Authorizer:(org.apache.shiro.authz.Authorizer)即授權器,使用者在通過認證器認證通過後,在訪問時需要通過授權器判斷使用者是否有此功能的操作許可權。最終是通過認證器對主體進行授權的。
Realm:(org.apache.shiro.realm.Realm)Realm即領域,相當於DataSource資料來源,通過Realm存取認證、授權相關資料。SecurityManager通過認證器對主體進行安全認證需要通過Realm獲取使用者身份資料,比如:如果使用者身份資料在資料庫,那麼Realm就需要從資料庫獲取使用者的身份資訊。授權也是如此,也需要通過Realm取出授權相關資訊。注意:不要將Realm理解成只是從資料來源獲取資料,在Realm中還有認證授權校驗的相關程式碼
SessionManager:(org.apache.shiro.session.SessionManager)會話管理。web應用中一般是web容器對Session進行管理,shiro框架定義了一套會話管理,它不依賴於web容器的Session,所以shiro可以使用在非web應用上,也可以將分散式應用的會話集中在一點進行管理,此特性可使它實現單點登入。
SessionDAO:SessionDAO即會話dao,是對Session會話操作的一套介面,比如要將Session儲存到資料庫,可以通過JDBC將會話儲存到資料庫。針對個性化的Session資料儲存(存到資料庫)需要使用SessionDAO。
CacheManager:(org.apahce.shiro.cache.CacheManager)快取管理器,主要對Session和授權資料進行快取,比如將授權資料通過cachemanager進行快取管理,和ehcache整合對快取資料進行管理,可以減少不必要的後臺訪問,提高應用效率,增加使用者體驗。
Cryptography:(org.apache.shiro.crypto.*)密碼管理,提供了一套加密/解密元件,對JDK中的加密解密演算法進行了封裝,方便開發。比如提供常用的雜湊、加/解密等功能,比如MD5雜湊演算法。
---------------------
作者:LIUXUN1993728
來源:CSDN
原文:https://blog.csdn.net/u013087513/article/details/75051134
版權宣告:本文為博主原創文章,轉載請附上博文連結!