SpringBoot整合Shiro+MD5+Salt+Redis實現認證和動態許可權管理(上)----築基中期
阿新 • • 發佈:2020-10-11
## 寫在前面
通過前幾篇文章的學習,我們從大體上了解了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();