subject:主體,代表了當前「使用者」,通過subject與shiro框架進行互動。
securitymanager:安全管理器,shiro框架的核心,負責排程整個框架的執行 。
realm:域,shiro從realm獲取安全資料(如使用者、角色、許可權),就是說securitymanager要驗證使用者身份, 那麼它需要從realm獲取相應的使用者進行比較以確定使用者身份是否合法;也需要從realm得到使用者相應的角色/許可權 進行驗證使用者是否能進行操作;可以把realm看成datasource,即安全資料來源。
credentialsmatcher:密碼比較器,通過密碼比較器進行使用者密碼比較
cachemanager:快取控制器,來管理如使用者、角色、許可權等的快取的;因為這些資料基本上很少去改變,放到 快取中後可以提高訪問的效能
前提(有乙個使用者登入
輸入使用者郵箱和密碼user
使用者user可以分配角色role,並且給角色賦予不同的許可權module來檢視不同的模組
shirofilter
org.springframework.web.filter.delegatingfilterproxy targetfilterlifecycle
true
/*
注意:delegatingfilterproxy
這個類的作用就和他的名字一樣,他就是乙個起**作用的過濾器,而真正的***當然就是是spring-shiro裡面的配置
shiro與spring整合
配置許可權第一種方式: /system/module/list.do = perms["模組管理"]
/index.jsp = anon
/login.jsp = anon
/login* = anon
/logout* = anon
/css/** = anon
/img/** = anon
/plugins/** = anon
/make/** = anon
/** = authc
/*.* = authc
基於類,需要使用cglib庫/false是基於介面jdk動態**
//1 獲取subject
subject subject = securityutils.getsubject();
try catch (exception e)
身份驗證,即在應用中誰能證明他就是他本人。一般提供如他們的身份id一些標識資訊來表明他就是他本人,如提供身份證,使用者名稱/密碼來證明。在shiro中,使用者需要提供principals (身份)和credentials(證明)給shiro,從而應用能驗證使用者身份:
principals:身份,即主體的標識屬性,可以是任何東西,如使用者名稱、郵箱等,唯一即可。乙個主體可以有多個principals,但只有乙個primary principals,一般是使用者名稱/密碼/手機號。
credentials:證明/憑證,即只有主體知道的安全值,如密碼/數字證書等。
最常見的principals和credentials組合就是使用者名稱/密碼了。接下來先進行乙個基本的身份認證。
/**
* @描述 自定義realm:繼承authorizingrealm
*/public class authrealm extends authorizingrealm else
}
了解:
authenticationinfo
物件中儲存的是主體(subject)的身份認證資訊。shiro會呼叫credentialsmatcher
物件的docredentialsmatch
方法對authenticationinfo
物件和authenticationtoken
進行匹配。匹配成功則表示主體(subject)認證成功,否則表示認證失敗。******account 是
account
的乙個實現。在inirealm
、propertiesrealm
這種靜態建立帳號資訊的場景中使用,這些realm
直接繼承了******accountrealm
,而******accountrealm
提供了相關的 api 來動態維護******account
;即可以通過這些 api來動態增刪改查******account
;動態增刪改查角色/許可權資訊。如果您的帳號不是特別多,可以使用這種方式。
account
不僅繼承了authenticationinfo
,繼承了authorizationinfo
,也就是說它不僅包含主體的身份認證資訊,還包含了主體的授權資訊(角色、許可權)。
* @描述 自定義密碼比較器,繼承******credentialsmatcher
*/public class customcredentialsmatcher extends ******credentialsmatcher
/**
* 授權 : 獲取當前登入使用者的所有操作許可權交給shiro管
* 引數:principalcollection(shiro中安全資料的集合)
* 獲取當前登入的使用者物件
* 返回值:authorizationinfo(當前操作使用者的所有許可權物件)
* 返回物件的時候,將許可權交給shiro管理(shiro會自動的判斷是否具有許可權)
*/protected authorizationinfo dogetauthorizationinfo(principalcollection principalcollection)
info.setstringpermissions(perms);
return info;
}
/** * 註解配置許可權的第二種方式:註解shiro支援頁面標籤的形式對頁面按鈕進行許可權校驗,用於控制頁面按鈕的現實與否。* @requirespermissions(「許可權名稱」)
* 必須具備某種許可權才能訪問此方法
* :如果沒有許可權,會丟擲異常(使用異常處理的方式跳轉到許可權不足頁面)
* :對於多個方法,需要配置多次太麻煩
*/
使用方式:
(1)jsp頁面匯入shiro頁面標籤庫
(2)在需要控制的按鈕上配置shiro標籤:
刪除
shiro使用 簡單sesiion使用
既然要做,就做的細緻一點,對得起自己!在shiro中配置session,普通思想 配置session的過期時間,session到期之後,要求使用者再次發起登入請求。高階思想 如果使用者一直不關閉瀏覽器,或者過早的關閉了瀏覽器,那麼就要相應的更新session時間和定期清理這些過期session。高階...
Spring中shiro的簡單使用
先將一下shiro工作的乙個流程,示例在後面,想要直接看 的朋友可以直接下滑。shrio認證流程 1 通過配置檔案建立 securitymanager類。2 使用者登入時 建立 usernamepasswordtoken 類的乙個物件 token 3 通過securityutils.getsubje...
shiro加密簡單實現
1 新增shiro依賴 定義shiro的版本號 1.2.3 加入shiro的依賴 org.apache.shiro shiro core org.apache.shiro shiro web org.apache.shiro shiro spring org.apache.shiro shiro a...