個人博客網:https://wushaopei.github.io/ (你想要這里多有)
一、Apache Shiro 介紹及概念
概念:Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕松地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。
Shiro 框架圖:
框架圖解析:
Primary Concerns四部分: 用戶識別、授權、會話管理、加密
Supporting Features 五部分: Shiro特有的API、緩存、 並發、測試、Run As 、Remember Me
Shiro 概念層 架構:
應用代碼經過 Subject 進行簡單授權和認證, Subject 又委托給SecurityManager
二、Apache Shiro 部分功能講解:
1、Apache Shiro授權講解
- 首先調用Subject 進行處理,再委托給 Security Manageer ,Security Manageer會委托給 Authorizer ,Authorizer是真正的授權者。
Shiro 的授權主要包含四個核心:主體、資源、權限、角色
主體: 訪問應用的用戶,用戶只有授權后才能訪問到相應的資源
資源: 查看、編輯某個數據,讀取某個文本等都是資源
權限: 建立在資源以及操作上,只限定能做什么
角色: 才是真正可以對主體的權限進行分配的核心
2、 Apache Shiro權限攔截框架圖:
3、Apache Shiro會話管理框架圖
會話管理主要是管理所有會話的創建、查詢、交互等。
三、基於SpringBoot的Apache Shiro環境快速搭建與配置
1、環境搭建及使用
主要涉及兩點:
- 快速搭建Spring Boot + Apache Shiro 環境
- 常用Case實現
(1)創建springboot 工程 Spring-boot_Shiro ,整合 Shiro 依賴
(2)創建數據庫表結構 : user 、role、permission、permission_role、user_role、五張表;
(3)創建 user、role、permission 三個類
(4)創建service業務層、mapper 持久層
service 、serviceimpl業務接口及實現類
UserMapper.java 持久層
UserMapper.xml
(5)配置mapper.xml 包掃描位置及對應的javabean 所在包,用於mapper.xml的映射
application.yml 配置文件:
Bootstrap 啟動類:
2、基於Apache Shiro權限管理Case -- 認證授權配置
創建自定義的 AuthRealm 類,該類 繼承 AuthorizingRealm 類,並重寫doGetAutherizationInfo(PrincipalCollection principals) 和 doGetAuthenticationInfo(AuthenticationToken token) 兩個方法 分別 作為授權和認證登錄所用;
3、基於Apache Shiro權限管理Case -- 密碼規則校驗器
說明:
因為密碼是直接取得數據庫的密碼,所以想要保證用戶傳入的密碼能和我的密碼能夠匹配,需要創建自定義的密碼校驗規則。
具體:通過重寫CredentialsMatcher 類,繼承SimpleCredentialsMatcher類,重新定義 密碼校驗規則的重寫
4、基於Apache Shiro權限管理Case -- Shiro配置
創建 ShiroConfiguration 類 ,該類是 shiro 的配置類
5、定義請求接口:包括首頁、登錄頁、異常頁面
6、定義jsp 頁面,包括index.jsp、login.jsp、
jsp 相關配置:在 yml 文件中,申明jsp的前綴、后綴
login.jsp
index.jsp
接口登錄測試:
提交,認證通過
7、基於Apache Shiro權限管理Case -- Shiro配置 登錄攔截
shiro 過濾器添加配置:
測試:
除了登錄功能不需要進行認證外,其他接口請求都需要進行用戶是否登錄的認證.
8、基於Apache Shiro權限管理Case -- Shiro配置 角色認證
在 ShiroConfiguration.java 進行配置:
在AuthRealm.java進行配置:
8、基於Apache Shiro權限管理Case -- Shiro配置 permission 認證
說明:具有指定 permission 功能的permission才可以訪問,如有edit時,才可以訪問,否則不能訪問
在ShiroConfiguration.java類中 shiroFilter 方法中配置: