我的shiro之旅: 一 shiro簡介
前段時間,因為專案需要,用shiro搭建了一個許可權系統。現在專案已完成,希望通過以文章的形式,對shiro進行一些總結。
也希望在總結過程中,對shiro有更深刻的認識。首先,對shiro進行一個簡單介紹。
一 什麼是shiro
Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理功能,可為任何應用提供安全保障.
二 shiro的幾個特性
- 易於使用 - 易用性是這個專案的最終目標。應用安全有可能會非常讓人糊塗,令人沮喪,並被認為是“必要之惡”。若是能讓它簡化到新手都能很快上手,那它將不再是一種痛苦了。
- 廣泛性 - 沒有其他安全框架可以達到Apache Shiro宣稱的廣度,它可以為你的安全需求提供“一站式”服務。
- 靈活性 - Apache Shiro可以工作在任何應用環境中。雖然它工作在Web、EJB和IoC環境中,但它並不依賴這些環境。Shiro既不強加任何規範,也無需過多依賴。
- Web能力 - Apache Shiro對Web應用的支援很神奇,允許你基於應用URL和Web協議(如REST)建立靈活的安全策略,同時還提供了一套控制頁面輸出的JSP標籤庫。
- 可插拔 - Shiro乾淨的API和設計模式使它可以方便地與許多的其他框架和應用進行整合。你將看到Shiro可以與諸如Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin這類第三方框架無縫整合。
- 支援 - Apache Shiro是Apache軟體基金會成員,這是一個公認為了社群利益最大化而行動的組織。專案開發和使用者組都有隨時願意提供幫助的友善成員。像Katasoft這類商業公司,還可以給你提供需要的專業支援和服務。
三 shiro幾個重要概念
Subject
在考慮應用安全時,你最常問的問題可能是"當前使用者是誰",或"當前使用者允許做x嗎"。當我們寫程式碼或設計使用者介面時,問自己這些問題很平常:應用通常都是基於使用者有事構建的,並且你希望功能描述是基於每個使用者的。所以,對於我們而言,考慮應用安全的最自然方式就是基於當前使用者。shiro用Subject概念從根本上體現了這種思考方式。
在shiro中,要得到Subject非常容易,shiro提供了一個工具類,讓應用很容易得到當前使用者,程式碼:
Subject currentUser = SecurityUtils.getSubject();
SecurityManager
Subject的“幕後”推手是SecurityManager.Subject代表了當前使用者的安全操作,SecurityManager則管理所有使用者的安全操作。它是Shiro框架的核心,充當“保護傘”,引用了多個內部巢狀安全元件,它們形成了物件圖。但是,一旦SecurityManager及其內部物件圖配置好,它就會退居幕後,應用開發人員幾乎把他們的所有時間都花在Subject API呼叫上。
Realms
Shiro的第三個也是最後一個概念是Realm。Realm充當了Shiro與應用安全資料間的“橋樑”或者“聯結器"。也就是說,當切實與像使用者帳戶這類安全相關資料進行互動,執行認證(登入)和授權(訪問控制)時,Shiro會從應用配置的Realm中查詢很多內容。
部落格已移至 http://blog.gogl.top