Apache Shiro系列一,概述 —— 初識

一、什麼是Shiro

         Apache Shiro是一個強大、靈活、開源的安全框架,它支持用戶認證、權限控制、企業會話管理以及加密等。

        

         Apache Shiro的第一個也是最重要的一個目標就是易於使用和理解。對應用程序做安全管理常常很複雜,甚至很痛苦,但是實際上完全可以避免。一個好的安全安全管理框架應該能夠將複雜度隱藏在框架內部,對外提供簡潔、直觀的API,以便用戶可以很簡單的給應用添加安全控制。

        

         下面是Apache Shiro能夠提供給我們的一些特性:

         #,做用戶身份認證;

         #,做訪問權限控制,比如:

                   #,這個用戶是否被賦予了某個角色;

                  #,這個用戶是否有權限做某件事情;

         #,可以在任何環境下使用用戶會話管理,即便沒有web或者ejb容器也可以;

         #,可以整合多種類型的用戶權限數據(比如關係數據庫、LDAP等)到一個用戶視圖界面;

         #,支持單點登錄(Single Sign On SSO);

         #,支持 記住祕密 服務。

        

         Shiro盡力爲各種應用程序的環境來達成以上的目標——從簡單的命令行程序到大型企業應用,不要求支持任何第三方的框架、容器或者應用服務器。當然,Shiro會盡力與這些環境集成,但是Shiro的運行絕對不會依賴於這些環境。

 

        

 

二、Apache Shiro的特性

         Shiro的特性很多,下圖展示了Shiro的架構,從中我們可以瞭解到Shiro聚焦在哪裏,並且我們這個系列的文檔也是按照類似的結構來組織。

        

 

         Shiro聚焦與應用程序安全領域的四大基石:認證、授權、會話管理和保密。

         #,認證,也叫作登錄,用於驗證用戶是不是他自己所說的那個人;

         #,授權,也就是訪問控制,比如用於決定「誰」是否有權限訪問「什麼」;

         #,會話管理,管理用戶相關的會話,即使在非web和ejb的環境下也支持;

         #,保密,使用特性加密算法來保證用戶數據的安全性,同時還要保證用起來夠簡單;

 

         同時Shiro還提供了其他特性來在不同的應用程序環境下使用強化以上的四大基石:

#,Web支持:Shiro的web相關的API簡化了web應用安全控制;

#,緩存,在Shiro中,緩存是一等公民,用於保證用戶認證和權限控制的性能;

#,測試,支持可測試性,以便用戶可以方便的對安全相關代碼編寫單元測試和集成測試;

#,記住密碼,可以跨會話的記住用戶的身份信息,以便只有在一些強制性的場合才需要登錄。

        

概述 —— 基本概念


做任何事情,首先要雙方就一些概念的理解達成一致,這樣大家就有共同語言,後續的溝通效率會高一些。

 

#,Authentication,認證,也就是驗證用戶的身份,就是確定你是不是你,比如通過用戶名、密碼的方式驗證,或者某些第三方認證,比如微信認證。

#,Authorization,授權,也叫訪問控制,也就是看你是否有權限做什麼事情,比如是否有權限看某個文件,或者是否有權限做後臺管理;

#,Cipher,加密方式,這裏主要有幾種常用的加密方式,比如分組密碼(Block Ciphers)、流密碼(Stream Ciphers)、對稱加密(Symmetric Ciphers)、非對稱加密(Asymmetric Ciphers

#Credential,證書,比如密碼、指紋或者網銀的Key都算是證書的一種。系統通過將用戶提供的證書和系統存儲的證書比較,如果一致就認爲用戶的身份是對的;

#Hash,哈希,一種單相的數據加密算法;

#Persmission,權限,用於描述系統的某項基礎功能,比如 「打開一個文件」,「查看’/user/list/’頁面」,「打印文檔」,這些都算是一種權限;

#Principal,身份,就是一種用於標識用戶身份的一種屬性,比如郵箱、電話號碼、用戶名、微信號等;

#Realm,這是一個用於訪問應用程序的用戶、角色、權限的組件,可以把它看做是ShiroDAO(Data Access Object),用於把各種存儲介質(比如關係數據庫、LDAP、文件)內的用戶權限數據轉換爲Shiro能夠理解的格式。

#Role,角色,在Shiro中,角色就是權限的組合;

#Session,會話,也就是用戶登錄之後的上下文,在用戶登出之前可以不用傳遞用戶名、密碼就可以做各種操作;

#Subject,起始就是user,但是在Shiro中把它叫做Subject,因爲和我們系統交互的不一定是人,也可能是其他的系統。

 

 

官方文檔:http://shiro.apache.org/introduction.html