使用者角色許可權系統完整設計(基於shiro)

zsxlyx發表於2017-08-22

一:shiro簡介

1.1:shiro可以幫助我們完成:認證,授權,加密,會話管理,與web整合,快取等。shiro不會去維護使用者沒維護許可權。這些需要我們自己設計提供,然後通過想應的介面注入給shiro。


1.2:shiro的API簡單介紹
Authentication : 身份認證/登入,驗證使用者是不是擁有想應的身份。
Authorization:授權,即許可權驗證,驗證某個已認證的使用者是否擁有某個許可權;即判斷使用者是否能做事情,常見的如,驗證某個使用者是否擁有某個角色,或者細粒度驗證某個使用者對某個資源是否具有某個許可權。
Sessin Manager 會話管理,即使用者登陸後就是一次會話,在沒有退出之前,他的所有資訊都在會話中;會話可以是普通javase環境,也可以是web環境。
Cryptography: 加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是銘文儲存。
Web Support : Web支援,可以非常容易的整合到web環境
Caching:快取,比如使用者登陸後,其使用者資訊,擁有的角色/許可權不用每次去查,可以提高效率。
Concurrency:shiro支援多執行緒應用的併發驗證,即如在一個執行緒中開啟另一個執行緒,能把許可權自動傳播過去;
Testing: 提供測試支援。
Run As 允許使用者假裝為另一個使用者的身份進行訪問。
Remember Me 記住我,這是一個常見功能,即一次登陸後,下次再來的話就不用登入了。


1.3:從應用程式角度解析shiro工作過程.
應用程式碼直接互動物件Subject
Subject:主體,代表當前使用者。與當前應用互動的任何東西都是Subject,如網路爬蟲,機器人等。所有Subject都繫結到SecurityManager,與Subject的所有互動都會委託給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際執行者。
SecurityManager: 安全管理器;即所有與安全有關的操作都會與SecurityManager互動;且它管理者所有Subject;他是Shiro的核心,它負責後面介紹的其他元件進行互動。
Realm:域。Shiro從Realm獲取安全資料(使用者,角色,許可權),就是說SecurityManager要驗證使用者身份,那麼他需要從Realm獲取想應得使用者進行比較以確定身份是否合法。;也需要才Realm得到使用者相應的角色/許可權驗證使用者是否能進行操作。


1.4 最簡單的Shiro應用:
1、應用程式碼通過Subject來進行認證和授權,而Subject又委託給SecurityManager;
2、我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的使用者及其許可權進行判斷。


1.5 從Shiro內部來看Shiro架構

相關文章