首先Shiro較之 Spring Security,Shiro在保持強大功能的同時,還在簡單性和靈活性方面擁有巨大優點。spring
Shiro是一個強大而靈活的開源安全框架,可以很是清晰的處理認證、受權、管理會話以及密碼加密。以下是它所具備的特色:sql
除了不能脫離Spring,shiro的功能它都有。並且Spring Security對Oauth、OpenID也有支持,Shiro則須要本身手動實現。Spring Security的權限細粒度更高(筆者還未發現高在哪裏)。apache
注:緩存
OAuth在"客戶端"與"服務提供商"之間,設置了一個受權層(authorization layer)。"客戶端"不能直接登陸"服務提供商",只能登陸受權層,以此將用戶與客戶端區分開來。"客戶端"登陸受權層所用的令牌(token),與用戶的密碼不一樣。用戶能夠在登陸的時候,指定受權層令牌的權限範圍和有效期。安全
"客戶端"登陸受權層之後,"服務提供商"根據令牌的權限範圍和有效期,向"客戶端"開放用戶儲存的資料。cookie
OpenID 系統的第一部分是身份驗證,即如何經過 URI 來認證用戶身份。目前的網站都是依靠用戶名和密碼來登陸認證,這就意味着你們在每一個網站都須要註冊用戶名和密碼,即使你使用的是一樣的密碼。若是使用 OpenID ,你的網站地址(URI)就是你的用戶名,而你的密碼安全的存儲在一個 OpenID 服務網站上(你能夠本身創建一個 OpenID 服務網站,也能夠選擇一個可信任的 OpenID 服務網站來完成註冊)。框架
與OpenID同屬性的身份識別服務商還有ⅥeID,ClaimID,CardSpace,Rapleaf,Trufina ID Card等,其中ⅥeID通用帳戶的應用最爲普遍。ide
我的認爲現階段需求,權限的操做粒度能控制在路徑及按鈕上,數據粒度經過sql實現。Shrio簡單夠用。性能
至於OAuth,OpenID 站點間統一登陸功能,現租戶與各個產品間單點登陸已經經過cookies實現,因此Spring Security的這兩個功能能夠不考慮。學習
SpringSide網站的權限也是用Shrio作的。
shiro有不少地方都比spring security方便簡單直接,比起spring security的龐大模式更容易理解和切入一些,而spring security比shiro功能上要多一點,再就是和spring框架的無縫對接,好比支持spel等,有時候比shiro更方便靈活。不過spring security的不少源代碼我看了感受可插拔性設計的不夠優化,想本身擴展的話要作不少無謂的工做。
可是咱們團隊最終選擇了spring security,一是由於spring這個名字的加持,再就是咱們偏向選擇一個足夠健壯的框架,足以支持全部的需求,最終總共只須要付出學習這一個框架的成本就好了。而不是先學習一個足以應對絕大多數狀況的簡單框架,在特殊狀況時又必須學習功能更強的框架,最終付出雙倍的學習成本。