Spring Boot入門教程(7)-整合jpa,Shiro進行許可權管理(附源碼
摘要: Shiro是Apache下的一個開源項目,我們稱之為Apache Shiro。它是一個很易用與Java項目的的安全框架,提供了認證、授權、加密、會話管理,與spring Security 一樣都是做一個許可權的安全框架,但是與Spring Security 相比,在於 Shiro 使用了比較簡單易懂易於使用的授權方式。
前面已經介紹過springBoot和mybatis、JPA的整合,本篇主要是在上一篇的基礎上整合Shiro進行許可權的管理。
源碼鏈接
1、簡介
先簡單介紹下shiro吧,其實它就是一個安全框架,相比spring Security使用起來更簡單易懂。引用一張架構圖(圖片來自官網),從圖中大家可以看到他的三大核心:
-Subject 當前用戶操作
- SecurityManager 用於管理所有的Subject
- Realms 用於進行許可權信息的驗證,也是我們需要自己實現的。
我們需要實現Realms的Authentication 和 Authorization。其中 Authentication 是用來驗證用戶身份,Authorization 是授權訪問控制,用於對用戶進行的操作授權,證明該用戶是否允許進行當前操作,如訪問某個鏈接,某個資源文件等。
Apache Shiro 核心通過 Filter 來實現,就好像SpringMvc 通過DispachServlet 來主控制一樣。
既然是使用 Filter 一般也就能猜到,是通過URL規則來進行過濾和許可權校驗,所以我們需要定義一系列關於URL的規則和訪問許可權。
另外我們可以通過Shiro 提供的會話管理來獲取Session中的信息。Shiro 也提供了緩存支持,使用 CacheManager 來管理。
要集成shiro我們必須知道他的幾個核心對象,分別是:
第一:ShiroFilterFactory,Shiro過濾器工廠類,具體的實現類是:ShiroFilterFactoryBean,此實現類是依賴於SecurityManager安全管理器。
第二:SecurityManager,Shiro的安全管理,主要是身份認證的管理,緩存管理,cookie管理,所以在實際開發中我們主要是和SecurityManager進行打交道的,ShiroFilterFactory主要配置好了Filter就可以了。當然SecurityManager並進行身份認證緩存的實現,我們需要進行對應的編碼然後進行注入到安全管理器中。
第三:Realm,用於身份信息許可權信息的驗證。
第四:其它的就是緩存管理,記住登錄之類的,這些大部分都是需要自己進行簡單的實現,然後注入到SecurityManager讓Shiro的安全管理器進行管理就好了。
2、整合完成demo
概念介紹完了 ,我們開始動手,完成我們的demo,具體步驟如下:
(a) pom.xml中添加Shiro依賴;
(b) 注入Shiro Factory和SecurityManager。
(c) 身份認證
(d) 許可權控制
(a) 添加Shiro依賴
(b) 注入Shiro Factory和SecurityManager
使用springBoot的配置方式,新建config類,主要配置兩個類ShiroFilterFactory和SecurityManager
(c) 身份認證
在認證、授權內部實現機制中都有提到,最終處理都將交給Real進行處理。因為在Shiro中,最終是通過Realm來獲取應用程序中的用戶、角色及許可權信息的。通常情況下,在Realm中會直接從我們的數據源中獲取Shiro需要的驗證信息。可以說,Realm是專用於安全框架的DAO.
認證實現
Shiro的認證過程最終會交由Realm執行,這時會調用Realm的getAuthenticationInfo(token)方法。
該方法主要執行以下操作:
1、檢查提交的進行認證的令牌信息
2、根據令牌信息從數據源(通常為資料庫)中獲取用戶信息
3、對用戶信息進行匹配驗證。
4、驗證通過將返回一個封裝了用戶信息的AuthenticationInfo實例。
5、驗證失敗則拋出AuthenticationException異常信息。
而在我們的應用程序中要做的就是自定義一個Realm類,繼承AuthorizingRealm抽象類,重載doGetAuthenticationInfo (),重寫獲取用戶信息的方法。
既然需要進行身份許可權控制,那麼少不了創建用戶實體類,許可權實體類。
在許可權管理系統中,有這麼幾個角色很重要,這個要是不清楚的話,那麼就很難理解,我們為什麼這麼編碼了。第一是用戶表:在用戶表中保存了用戶的基本信息,賬號、密碼、姓名,性別等;第二是:許可權表(資源+控制許可權):這個表中主要是保存了用戶的URL地址,許可權信息;第三就是角色表:在這個表重要保存了系統存在的角色;第四就是關聯表:用戶-角色管理表(用戶在系統中都有什麼角色,比如admin,vip等),角色-許可權關聯表(每個角色都有什麼許可權可以進行操作)。依據這個理論,我們進行來進行編碼,很明顯的我們第一步就是要進行實體類的創建。在這裡我們使用Mysql和JPA進行操作資料庫。
新建實體類UserInfo、SysRole、SysPermission(採用逆向工程生成資料庫表,然後導入數據)--非關鍵的get、set方法省略
UserInfo.java
SysRole.java
SysPermission.java
MyShiroRealm.java
該類是實現許可權認證的核心,需要我們手動實現
核心功能基本完成,接下來就是編寫controller和頁面了


※使用Bluemix進行chatbot的開發總結
※決策樹是如何工作的
※X語言,從入門到放棄……自學成為程序員真正需要的是什麼?
TAG:C編程軟體開發學習 |