1. 程式人生 > >SpringBoot整合Shiro+MD5+Salt+Redis實現認證和動態許可權管理(上)----築基中期

SpringBoot整合Shiro+MD5+Salt+Redis實現認證和動態許可權管理(上)----築基中期

## 寫在前面 通過前幾篇文章的學習,我們從大體上了解了shiro關於認證和授權方面的應用。在接下來的文章當中,我將通過一個demo,帶領大家搭建一個SpringBoot整合Shiro的一個專案開發腳手架,將之前學過的知識點串到一起,其中,也會補充一些之前沒有講過的內容。通過這個demo結束這幾天的學習,同時也是結束國慶中秋小長假shiro系列專題入門文章。 ## SpringBoot整合Shiro思路分析 ### 鑑權流程分析 我們將我們的SpringBoot應用整合shiro,主要目的就是讓shiro幫我們處理認證和授權的相關內容。也就是說,我們需要讓shiro接管我們SpringBoot應用的會話。讓使用者的每一次請求都經過shiro進行認證和授權。因此,我們需要將使用者請求攔截下來轉發給shiro處理,這個攔截器是shiro提供的,`ShiroFilter`。 **步驟**: 1. 使用者通過客戶端(瀏覽器、手機App、小程式)發起請求 2. ShiroFilter攔截請求並判斷請求訪問的資源是否為受保護資源: 2.1 是,則執行步驟3 2.2 不是,則直接放行 3. 判斷使用者是否已通過認證: 3.1 是 ,則執行步驟4 3.2 否,將使用者請求重定向到認證頁面,讓使用者先認證 4. 獲取使用者許可權資訊和訪問資源所需要的許可權資訊進行比對: 4.1 使用者具備訪問許可權,則放行 4.2 使用者不具備許可權,返回403的相應提示 ### 資料庫分析設計 我們通過MySQL儲存我們的認證和許可權的相關資料。採用使用者-角色-許可權模型實現動態管理使用者許可權資訊。 我們將系統當中的選單、按鈕、後端介面都抽象成系統的資源資料。以下是資料庫表的設計: ![](https://raw.githubusercontent.com/code81192/art-demo/master/img/20201006145240.png) 文末提供sql指令碼的下載。 ## 整合步驟 ### 環境搭建 #### maven 建立一個SpringBoot的web應用,並引入如下依賴 ```xml ``` ### 新增對使用者、角色和資源的CRUD支援 這裡程式碼就省略了,不影響理解,完整程式碼可以從文末提供的方式中下載。 ### 配置Shiro #### 自定義Realm ```java /**自定義Realm,使用mysql資料來源 * @author 賴柄灃 [email protected] * @version 1.0 * @date 2020/10/6 9:09 */ public class MySQLRealm extends AuthorizingRealm { @Autowired private IUserService userService; @Autowired private IRoleService roleService; @Autowired private IResourceService resourceService; /** * 授權 * @param principals * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String) principals.getPrimaryPrincipal();