1. 程式人生 > >如何使用shiro認證授權。

如何使用shiro認證授權。

這裡是修真院後端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】

八個方面深度解析後端知識/技能,本篇分享的是:

【如何使用shiro認證授權。】

 

【修真院java小課堂】如何使用shiro認證授權

 

大家好,我是IT修真院鄭州分院第11期的JAVA學員,一枚正直純潔善良的java程式設計師。

 

今天給大家分享一下,如何使用shiro認證授權。

 

1.背景介紹

 

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼學和會話管理。Shiro的主要功能是管理應用程式中與安全相關的全部,同時儘可能支援多種實現方法。

Shiro是建立在完善的介面驅動設計和麵向物件原則之上的,支援各種自定義行為。Shiro提供的預設實現,使其能完成與其他安全框架同樣的功能。

 

2.知識剖析

 

shiro三個核心元件-subject

 

Subject:主體,代表了當前“使用者”,這個使用者不一定是一個具體的人,與當前應用互動的任何東西都是Subject,如網路爬蟲,機器人等;即一個抽象概念;所有Subject都繫結到SecurityManager,與Subject的所有互動都會委託給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執行者;

 

主體要訪問系統,系統需要對主體進行認證、授權。Subject的生命週期:每一次訪問時都會建立一個新的subject,然後建立shiro封裝後的session,然後通過securityUtils中在程式的任何地方呼叫getSubject時都會返回同一個subject,也就是本次請求建立的那個。

 

shiro三個核心元件-SecurityManager

 

安全管理器;即所有與安全有關的操作都會與SecurityManager互動;且它管理著所有Subject;可以看出它是Shiro的核心,它負責與後邊介紹的其他元件進行互動,協調管理的元件,保證元件之間的關聯配合,同時也管理shiro視角的每一個使用者,保證每一個使用者的安全操作執行正確。

學習過SpringMVC,你可以把它看成DispatcherServlet前端控制器;

 

shiro三個核心元件-Realm

 

域,Shiro從Realm獲取安全資料(如使用者、角色、許可權),就是說SecurityManager要驗證使用者身份,那麼它需要從Realm獲取相應的使用者進行比較以確定使用者身份是否合法;也需要從Realm得到使用者相應的角色

 

Realm在Shiro和你應用的安全資料間扮演著橋樑或者聯結器的角色。當發生一次真實的安全資料互動,比如使用者登入和鑑權,Shiro會從程式配置好的一或多個Realm中查詢很多次資料。你可以配置你所需要的任意數量的Realm,Shrio在授權和鑑權的時候會去協調使用他們。

 

四大基石----身份驗證,授權,會話管理,加密

 

Authentication:身份認證/登入,驗證使用者是不是擁有相應的身份;

Authorization:授權,即許可權驗證,驗證某個已認證的使用者是否擁有某個許可權;即判斷使用者是否能做事情,常見的如:驗證某個使用者是否擁有某個角色。或者細粒度的驗證某個使用者對某個資源是否具有某個許可權;

Session Manager:會話管理,即使用者登入後就是一次會話,在沒有退出之前,它的所有資訊都在會話中;會話可以是普通JavaSE環境的,也可以是如Web環境的;

Cryptography:加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存;

 

3.常見問題

 

1)shiro許可權控制有哪幾張資料表

 

根據Shiro的設計思路,使用者與角色之前的關係為多對多,角色與許可權之間的關係也是多對多。

在資料庫中需要因此建立5張表,分別是使用者表(儲存使用者名稱,密碼,鹽等)、角色表(角色名稱,相關描述等)、許可權表(許可權名稱,相關描述等)、使用者-角色對應中間表(以使用者ID和角色ID作為聯合主鍵)、角色-許可權對應中間表(以角色ID和許可權ID作為聯合主鍵)。

 

2)shrio認證和授權的過程

 

4.編碼實戰

 

5.擴充套件思考

 

1)快取利用Cache防止同一帳號重複登入。

 

Cache與Session這二個狀態對像的其中有一個不同之處,Cache是一個全域性物件,作用的範圍是整個應用程式,所有使用者;而Session是一個使用者會話物件,是區域性物件,用於儲存單個使用者的資訊。

 

我們只要把每次使用者登入後的使用者資訊儲存在Cache中,把Cache的Key名設為使用者的登入名,Cache的過期時間設定為Session的超時時間,在使用者每次登入的時候去判斷一下Cache

 

2)安全框架Shiro和Spring Security比較.

 

Shiro是一個強大而靈活的開源安全框架,能夠非常清晰的處理認證、授權、管理會話以及密碼加密。

Spring Security除了不能脫離Spring,shiro的功能它都有。而且Spring Security對Oauth、OpenID也有支援,Shiro則需要自己手動實現。Spring Security的許可權細粒度更高.

shiro有很多地方都比spring security方便簡單直接,比起spring security的龐大模式更容易理解和切入一些,而spring security比shiro功能上要多一點,再就是和spring框架的無縫對接.

 

6.參考文獻

 

https://blog.csdn.net/u011781521/article/details/55094751

 

7.更多討論

 

1)如何實現自實現授權

 

實際開發中, 通常提供 org.apache.shiro.realm.AuthorizingRealm 的實現類,

並提供 doGetAuthorizationInfo(PrincipalCollection principals) 方法的具體實現

 

2)許可權管理的思路

 

將系統操作的每個url配置在許可權表中,將許可權對應到角色,將角色分配給使用者,使用者訪問系統功能通過Filter進行過慮,過慮器獲取到使用者訪問的url,只要訪問的url是使用者分配角色中的url則放行繼續訪問。

 

3)shiro的作用

 

我們在使用URL攔截的時候,要將所有的URL都配置起來,繁瑣、不易維護

 

而我們的Shiro實現系統的許可權管理,有效提高開發效率,從而降低開發成本。

 

 

 

PPT連結 視訊連結

 

 

 

 

更多內容,可以加入IT交流群565734203與大家一起討論交流

 

這裡是技能樹·IT修真院:http://www.jsnhu.com,初學者轉行到網際網路的聚集地