當前位置:
首頁 > 最新 > Spring Boot入門教程(7)-整合jpa,Shiro進行許可權管理(附源碼

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和頁面了


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C編程軟體開發學習 的精彩文章:

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

TAG:C編程軟體開發學習 |