天天看點

Shiro基礎知識與內建應用

1、Shiro可以完成: 【認證、授權、加密、會話管理】、與Web內建、緩存等

2、特點: 易于使用、全面、靈活、強力支援Web、相容性強、社群支援

Shiro基礎知識與內建應用

外部觀看

Shiro基礎知識與內建應用

内部觀看

3、 登入認證:

1)身份驗證:一般需要提供如身份ID等一些辨別資訊來表明登入者的身份,如提供email,使用者名/密碼來證明

2)在shiro中,使用者需要提供principals(身份)和credentials(證明)給shiro,進而應用能驗證使用者身份

3)principals:身份,即主體的辨別屬性,可以是任何屬性。如使用者名、郵箱等,唯一即可。一個主體可以有多個principals,但隻有一個Primary principals,一般是使用者名/郵箱/手機号

4)credentials:證明/憑證,即隻有主體知道的安全值,如密碼/數字證書等

5)最常見的principals和credentials組合就是使用者名/密碼

Shiro基礎知識與內建應用

一個簡單的登入demo測試代碼

Shiro基礎知識與內建應用

角色與授權

1、授權:通路控制,即在應用中控制誰通路哪些資源(如通路頁面/編輯資料/頁面操作等)。在授權中需了解的幾個關鍵對象: 主體(Subject)、資源(Resource)、權限(Permission)、角色(Role)

2、主體: 通路應用的使用者,在Shiro中使用Subject代表該使用者。使用者隻有授權後才允許通路相應的資源

3、資源: 在應用中使用者可以通路的URL,比如通路JSP頁面,檢視/編輯某些資料、通路某個業務方法、列印文本等等都是資源。使用者隻要授權後才能通路

4、權限: 安全政策中的院子授權機關,通過權限我們可以表示在應用中使用者,有沒有操作某個資源的權力。即權限表示在應用中使用者能不能通路某個資源,如:通路使用者清單頁面檢視/新增/修改/删除使用者資料等。權限代表了使用者有沒有操作某個資源的權利,即反映在某個資源上的操作允不允許

5、Shiro支援粗粒度權限和細粒度權限

6、角色: 權限的集合。 一般情況下會賦予使用者角色而不是權限,即這樣使用者可以擁有一組權限,賦予權限時比較友善

授權流程:

Shiro基礎知識與內建應用

判斷角色與權限的Demo代碼

Shiro基礎知識與內建應用

Shiro加密

1、帶鹽的md5加密,鹽就是在密碼明文後拼接新字元串,然後再進行加密

2、多次進行md5的疊代加密

3、使用父類進行加密

//shiro自帶了多種加密的方法

Shiro基礎知識與內建應用

Shiro自定義登入認證 【需要繼承 AuthenticatingRealm 實作 doGetAuthenticationInfo 方法】

//自定義登入認證方法,shiro的login方法底層會調用該類的認證方法進行認證

//需要配置自定義的realm生效,在ini檔案中配置,在springboot中配置

步驟:

擷取身份資訊、擷取憑證資訊、擷取資料庫中存儲的使用者資訊、建立封裝校驗邏輯對象,封裝資料傳回

Shiro基礎知識與內建應用
Shiro基礎知識與內建應用

一、rememberMe功能:

Shiro基礎知識與內建應用
Shiro基礎知識與內建應用
Shiro基礎知識與內建應用

二、對使用者進行角色和權限的設定

在自定義實作的Realm中,繼承AuthorizingRealm 需要實作兩個方法,其中doGetAuthorizationInfo是自定義授權的方法 以下代碼僅進行示例 實際可能通過某種方式擷取使用者的實際角色和權限, 然後指派 。 然後可以使用shiro的注解功能進行某些角色或權限的控制 。 **實際工作中可能需要更完善的權限驗證規則

Shiro基礎知識與內建應用

三、對全局進行的異常處理

Shiro基礎知識與內建應用

@ControllerAdvice是在類上聲明的注解。

@ExceptionHandler注解标注的方法:用于捕獲Controller中抛出的不同類型的異常,進而達到異常全局處理的目的。

繼續閱讀