Shiro概述,簡單使用

2021-09-25 16:40:27 字數 3709 閱讀 4085

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的乙個實現。在inirealmpropertiesrealm這種靜態建立帳號資訊的場景中使用,這些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;

}

/**  * 註解配置許可權的第二種方式:註解 

*      @requirespermissions(「許可權名稱」)  

*      必須具備某種許可權才能訪問此方法  

*      :如果沒有許可權,會丟擲異常(使用異常處理的方式跳轉到許可權不足頁面) 

*      :對於多個方法,需要配置多次太麻煩 

*/

shiro支援頁面標籤的形式對頁面按鈕進行許可權校驗,用於控制頁面按鈕的現實與否。

使用方式:

(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...