跟我學Shiro 認識shiro(1)

2022-09-21 20:15:17 字數 2322 閱讀 3356

apache shiro是乙個強大且易用的j**a安全框架,執行身份驗證、授權、密碼和會話管理。使用shiro的易於理解的api,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。

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

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

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

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

web support:web支援,可以非常容易的整合到web環境;

caching:快取,比如使用者登入後,其使用者資訊、擁有的角色/許可權不必每次去查,這樣可以提高效率;

concurrency*shiro支援多執行緒應用的併發驗證,即如在乙個執行緒中開啟另乙個執行緒,能把許可權自動傳播過去;

testing:提供測試支援;

run as:允許乙個使用者假裝為另乙個使用者(如果他們允許)的身份進行訪問;

remember me:記住我,這個是非常常見的功能,即一次登入後,下次再來的話不用登入了。

記住一點,shiro不會去維護使用者、維護許可權;這些需要我們自己去設計/提供;然後通過相應的介面注入給shiro即可。

(2)接下來我們分別從外部和內部來看看 shiro 的架構,對於乙個好的框架,從外部來看應該具有非常簡單易於使用的 api,且 api 契約明確;從內部來看的話,其應該有乙個可擴充套件的架構,即非常容易插入使用者自定義實現,因為任何框架都不能滿足所有需求。

首先,我們從外部來看 shiro 吧,即從應用程式角度的來觀察如何使用 shiro 完成工作。如下圖:

主要功能

三個核心元件: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實現。

《跟我學shiro》系列教程

第一章 shiro簡介 第二章 身份驗證 第三章 授權 第四章 ini配置 第五章 編碼 加密 第六章 realm及相關物件 第七章 與web整合 第八章 機制 第九章 jsp標籤 第十章 會話管理 第十一章 快取機制 第十二章 與spring整合 第十三章 rememberme 第十四章 ssl ...

跟我學Shiro 無狀態 Web 應用整合

在一些環境中,可能需要把 web 應用做成無狀態的,即伺服器端無狀態,就是說伺服器端不會儲存像會話這種東西,而是每次請求時帶上相應的使用者名稱進行登入。如一些 rest 風格的 api,如果不使用 oauth2 協議,就可以使用如 rest hmac 認證進行訪問。hmac hash based m...

Shiro的初步認識

shiro主要是用來對使用者的登入 許可權進行管理,可以實現使用者的認證授權。shiro和spring security的區別 shiro使用簡單,輕量級,可以在b s c s系統中使用,不依賴spring spring security 原名是acegi 僅僅是乙個許可權框架,和spring依賴很...