shiro許可權認證賦權,加密解密流程以及注意點

2021-09-26 10:40:12 字數 1823 閱讀 8587

shiro有三大部分組成:subject,securitymanager,realm

subject:負責於專案進行互動,暴露給外界使用,subject儲存著使用者的基礎資訊。

securitymanager:subject會將認證委託給securitymanager進行認證。

realm:儲存著使用者的核心資訊,儲存著資料來源。例如:許可權密碼。

執行原理:

得到subject之後,它是用來操作鑑權的起點,當前端的使用者輸入賬號和密碼,後台接收到之後,封裝成乙個usernamepassword物件,注意這個物件儲存的是前端輸入的明文密碼,當subject呼叫login方法之後,subject將認證的流程委託給

securitymanager,securitymanager會呼叫認證器,去進行認證判斷,認證判斷的資料是從realm中獲取過來的,realm的資料可以從int配置檔案獲取,也可以從資料庫獲取。這裡假設是從資料庫獲取的。

通過使用者名稱從資料庫中獲取密碼和鹽值,查詢之後將從資料庫查詢出來的使用者名稱、密碼、鹽值、ream名傳遞構建出來******authenticationinfo物件返回。

注意這個地方的鹽值,如果在資料不是字串的話需要進行轉換。

也許有人會很奇怪,前端的明文密碼是如何和資料中的密碼做檢驗的呢?因為在你構建usernameandpassword的時候,就將使用者名稱和密碼交給shiro管理了。然後再自定i的realm中又傳遞進去了鹽值和加密後的密碼。

這些資料最終會到達

這個地方會將鹽值取出然後將明文密碼加密,然後和資料庫的密碼做比較。

使用shiro做許可權控制,如果realm是從資料庫獲取資料的話,資料庫至少要有三張表:使用者表、角色表、角色許可權表。

shiro可以可以做乙個使用者是否已經登入。

可以做許可權的認證,攔截。

可以做乙個使用者只能在乙個程式上登入一次。

注意:realm只做資料的維護,提供資料;提供給securitymanager使用。

加密:

現在資料庫中一般儲存的都是密文密碼。

那shiro是如何實現加密後的匹配的呢?

流程:1、realm設定認證匹配器,認證匹配器設定加密的規則。

2、將realm設定給securitymanager。

3、當前端輸入賬號密碼之後,後端將輸入的明文賬號和密碼使用usernamepasswordtoken進行包裝。在和資料庫中的密碼進行匹配的時候,這個明文的密碼由於realm設定了認證匹配器,所以在進行認證的時候,會將前端的明文密碼也進行加密,然後在匹配。(注意:我該開始的時候以為是將資料庫取出的密碼轉成明文,但是現在的加密都是不可逆的,並且如果將資料庫中的密碼解密出來在和明文密碼做檢驗的話,也就是失去了加密的意義了)

4、這個地方在realm中,會使用前端輸入的使用者名稱,不用密碼,先去查詢使用者,然後將查詢的使用者的密碼傳入******authen

比較需要注意這個地方:

shiro預設採用的密碼是十六進製制的,如果你傳遞過來的不是十六進製制的話,需要再認證匹配其哪個地方指定

//設定系統憑證的編碼轉換格式,也就是密碼轉成什麼格式去比對,預設為true,表示16進製制,

hashedcredentialsmatcher.setstoredcredentialshexencoded(false);

表示不使用16進製制。

這裡的進製數一定要統一。

Shiro許可權認證

shiro的授權以及許可權 關係圖 我們需要在service層中先寫好方法 public inte ce shirouserservice然後imp繼承 service shirouserservice public class shirouserserviceimpl implements shi...

Shiro許可權認證Web

目錄 shiro內建的過濾器講解 filter配置路徑 shiro 資料安全之資料加解密 1.核心過濾器類 defaultfilter,配置哪個路徑對應哪個 進行處理 2.authc org.apache.shiro.web.filter.authc.formauthenticationfilter...

Shiro許可權管理(二) 認證

時隔這麼久終於有時間更新了,今天和大家分享一下shiro的原理。我認為無論是shiro也好,還是其他安全框架也好,其功能主要就分為三部分 認證 授權 加密。下面我們來詳細說明shiro具體是如何實現的。講原理當然離不開結構圖,我們先來看一下shiro的整體結構。由shiro的結構圖我們可以看出shi...