跟我學Shiro——認識shiro(1)

1:認識shiro

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、受權、密碼和會話管理。使用Shiro的易於理解的API,您能夠快速、輕鬆地得到任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。數據庫

image

Authentication:身份認證/登陸,驗證用戶是否是擁有相應的身份;緩存

Authorization:受權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能作事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具備某個權限;安全

Session Manager:會話管理,即用戶登陸後就是一次會話,在沒有退出以前,它的全部信息都在會話中;會話能夠是普通JavaSE環境的,也能夠是如Web環境的;網絡

Cryptography:加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;多線程

Web Support:Web支持,能夠很是容易的集成到Web環境;架構

Caching:緩存,好比用戶登陸後,其用戶信息、擁有的角色/權限沒必要每次去查,這樣能夠提升效率;併發

Concurrency*shiro支持多線程應用的併發驗證,即如在一個線程中開啓另外一個線程,能把權限自動傳播過去;框架

Testing:提供測試支持;測試

Run As:容許一個用戶僞裝爲另外一個用戶(若是他們容許)的身份進行訪問;加密

Remember Me:記住我,這個是很是常見的功能,即一次登陸後,下次再來的話不用登陸了。

記住一點,Shiro不會去維護用戶、維護權限;這些須要咱們本身去設計/提供;而後經過相應的接口注入給Shiro便可。

(2)接下來咱們分別從外部和內部來看看 Shiro 的架構,對於一個好的框架,從外部來看應該具備很是簡單易於使用的 API,且 API 契約明確;從內部來看的話,其應該有一個可擴展的架構,即很是容易插入用戶自定義實現,由於任何框架都不能知足全部需求。

首先,咱們從外部來看 Shiro 吧,即從應用程序角度的來觀察如何使用 Shiro 完成工做。以下圖:

image

主要功能

三個核心組件:Subject, SecurityManager 和 Realms.

Subject:即「當前操做用戶」。可是,在Shiro中,Subject這一律念並不只僅指人,也能夠是第三方進程、後臺賬戶(Daemon Account)或其餘相似事物。它僅僅意味着「當前跟軟件交互的東西」。但考慮到大多數目的和用途,你能夠把它認爲是Shiro的「用戶」概念。

Subject表明了當前用戶的安全操做,SecurityManager則管理全部用戶的安全操做。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro經過SecurityManager來管理內部組件實例,並經過它來提供安全管理的各類服務。

Realm: Realm充當了Shiro與應用安全數據間的「橋樑」或者「鏈接器」。也就是說,當對用戶執行認證(登陸)和受權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。

從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的鏈接細節,並在須要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用於認證和(或)受權。配置多個Realm是能夠的,可是至少須要一個。

也就是說對於咱們而言,最簡單的一個 Shiro 應用:

應用代碼經過 Subject 來進行認證和受權,而 Subject 又委託給 SecurityManager;

咱們須要給 Shiro 的 SecurityManager 注入 Realm,從而讓 SecurityManager 能獲得合法的用戶及其權限進行判斷。

Shiro內置了能夠鏈接大量安全數據源(又名目錄)的Realm,如LDAP、關係數據庫(JDBC)、相似INI的文本配置資源以及屬性文件等。若是缺省的Realm不能知足需求,你還能夠插入表明自定義數據源的本身的Realm實現。

相關文章
相關標籤/搜索