首先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这个名字的加持,再就是咱们偏向选择一个足够健壮的框架,足以支持全部的需求,最终总共只须要付出学习这一个框架的成本就好了。而不是先学习一个足以应对绝大多数状况的简单框架,在特殊状况时又必须学习功能更强的框架,最终付出双倍的学习成本。