1. 程式人生 > >谷海濤 廊坊師範學院資訊科技提高班 十四期

谷海濤 廊坊師範學院資訊科技提高班 十四期

Apache Shiro簡介

Apache Shiro是一個強大且易用的Java安全框架,提供了身份驗證、授權、加密和會話管理等功能。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。

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這類第三方框架無縫整合。

Shiro內部架構

在這裡插入圖片描述

框架簡單說明:

Subject:主體,可以看到主體可以是任何可以與應用互動的“使用者”;

SecurityManager:相當於SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心臟;所有具體的互動都通過SecurityManager進行控制;它管理著所有Subject、且負責進行認證和授權、及會話、快取的管理。

Authenticator:認證器,負責主體認證的,這是一個擴充套件點,如果使用者覺得Shiro預設的不好,可以自定義實現;其需要認證策略(Authentication Strategy),即什麼情況下算使用者認證通過了;

Authrizer:授權器,或者訪問控制器,用來決定主體是否有許可權進行相應的操作;即控制著使用者能訪問應用中的哪些功能;

Realm:可以有1個或多個Realm,可以認為是安全實體資料來源,即用於獲取安全實體的;可以是JDBC實現,也可以是LDAP實現,或者記憶體實現等等;由使用者提供;注意:Shiro不知道你的使用者/許可權儲存在哪及以何種格式儲存;所以我們一般在應用中都需要實現自己的Realm;

SessionManager:如果寫過Servlet就應該知道Session的概念,Session呢需要有人去管理它的生命週期,這個元件就是SessionManager;而Shiro並不僅僅可以用在Web環境,也可以用在如普通的JavaSE環境、EJB等環境;所有呢,Shiro就抽象了一個自己的Session來管理主體與應用之間互動的資料;這樣的話,比如我們在Web環境用,剛開始是一臺Web伺服器;接著又上了臺EJB伺服器;這時想把兩臺伺服器的會話資料放到一個地方,這個時候就可以實現自己的分散式會話(如把資料放到Memcached伺服器);

SessionDAO:DAO大家都用過,資料訪問物件,用於會話的CRUD,比如我們想把Session儲存到資料庫,那麼可以實現自己的SessionDAO,通過如JDBC寫到資料庫;比如想把Session放到Memcached中,可以實現自己的Memcached SessionDAO;另外SessionDAO中可以使用Cache進行快取,以提高效能;

CacheManager:快取控制器,來管理如使用者、角色、許可權等的快取的;因為這些資料基本上很少去改變,放到快取中後可以提高訪問的效能

Cryptography:密碼模組,Shiro提高了一些常見的加密元件用於如密碼加密/解密的。

關於Shiro的demo,後續更新。