Apache Shiro™ 是一個強大、簡單易用的身份認證、訪問控制、加解密和session管理 的JAVA 安全框架。
無論是移動應用還是web或者企業應用,你都能快速的利用Shiro提供的簡單的易懂的API 來保證你的應用的安全性。
一、Authentication Features(身份認證)
身份認證也就是身份校驗,即校驗用戶的身份和行爲。具體操作:用戶需要提供系統能夠識別和信任的身份證明。
Shiro框架的設計理念是讓身份認證無侵入性和簡單易用性,同時儘可能提供豐富的特性。
以下是shiro搶眼的身份認證特性:
1)、Subject Based(基於對象) :在shiro,你能做的任何事都是依賴於當前地操作用戶,此時的用戶成爲一個對象(subject)。
2)、Single Method call(單個方法調用):實現身份認證的值需要調用一個方法。只需要簡單地調用一個方法來保持你代碼乾淨,節省你的時間開支。
3)、Rich Exception Hierarchy(豐富的異常級別):Shiro提供了豐富的異常級別,可以詳細的闡述爲什麼登錄失敗。異常級別可以幫助你簡單地診斷代碼的bug和幫助客戶解決有關身份認證的問題。另外,你可以利用這個功能創建更復雜的身份認證功能。
4)、‘Remember Me’ built in(記住我):Shiro API可以記住你用戶,你可以利用這個功能提供更好的用戶體驗。
5)、Pluggable data sources(可拔插的數據源):Shiro 使用可拔插的數據訪問對象(DAOs),也稱爲Realms。
Shiro爲常用的數據源提供了開箱即用的realms,例如LDAP,Active Directory,jdbc。你也可以自定義realms。
6)、Login with one or more realms(依賴一個或者多個Realm登錄):使用shiro我們可以簡單地使用一個或者多個realm來認證用戶,並且返回統一的視圖給用戶。
二、Authorization(access control,訪問控制)
訪問控制對於任何應用來說都是至關重要的。shiro的目標就是讓你能夠簡單地實現訪問控制。訪問控制也就是控制用戶能做什麼,不能做什麼。
1)、Subject-based(基於主題):shiro基本都是依賴於當期正在使用的用戶(subject)。你的代碼可以通過訪問subject,從而取得Subject對象,並且可以驗證它的角色,權限或者其他一些屬性。
2)、Checks based on roles or permissions(校驗是基於角色或者許可證):shiro的設計是很靈活的,既可以基於角色來校驗,也可以使用許可證(類似token)來校驗。
3)、Multiple enforcement options(多種實施選擇):訪問控制可以通過多種方式實現,如:JDK1.5以上提供的註解、AOP、JSP/GSP 標籤等。shiro的目標就是提供多種選擇,可以讓你根據需要選擇合適的方式。
4)、Strong caching support(強大的緩存支持):shiro幾乎支持了所有開源的、企業的緩存產品。
5)、Powerful and intuitive permission syntax(強大、簡便的權限語法):shiro提供了一種開箱即用的權限語法,叫做Wildcard Permissions。
5)、Pluggable data sources(可拔插數據源)
6)、Supports any data model(支持任意的數據模型)
三、Cryptography(加密)
加密是通過隱藏或者轉換數據成看不懂的字符,從而保護不希望被訪問的信息的行爲。
Cipher Features:AbstractSymmetricCipherService
, DefaultBlockCipherService
, AesCipherService
Hash Features:MD5, SHA1, SHA-256等
四、Session Management(session管理):
session是用戶在使用你的應用期間,攜帶用戶信息的數據。
1)、POJO/J2SE based (IoC friendly):shiro都是通過接口變成或者實現接口。這樣很簡單的配置session組件。你也可以override shiro的組件,從而自定義session管理。
2)、Session Storage(sesion存儲):因爲shiro的session對象是基於POJO,所以session數據可以很簡單地存儲到任何數據源。
3)、Easy and Powerful Clustering(簡單、強大的集羣):shiro 的session 可以很簡單地通過網絡緩存產品(如ehcache)集羣。
4)、Heterogeneous Client Access (允許各種各樣的客戶端訪問)
5)、Event listeners(事件監聽)
6)、Host address retention(保留主機地址)
7)、Inactivity/expiration support (不活動、過期支持):由於不活動(session不更新)而導致session過期。
8)、ransparent web use
9)、Can be used for SSO(容易用於SSO)
五、Web Integration(與web結合使用):
儘管shiro設計師基於JVM的安全框架,但是它通常用於web 應用。他通過簡單的URL匹配和chain的定義來實現安全性。
六、Integrations
另外,shiro可以與其他技術跟框架整合。