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

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

如下是部份內容,具體見原文。算法

shiro介紹數據庫

什麼是shiroapache

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架構session


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
版權聲明:本文爲博主原創文章,轉載請附上博文連接!多線程

相關文章
相關標籤/搜索