何时从Container托管安全转移到Apache Shiro,Spring Security等替代方案?

时间:2011-10-16 06:17:26

标签: java security jsf jaas shiro

我正在尝试保护使用JSF2.0构建的应用程序。

我很困惑人们什么时候选择使用像Shiro,Spring Security或owasp的esapi这样的安全替代品来留下容器管理的安全性。在Stack Overflow上看到了一些related questions,我意识到JSF开发人员过去更喜欢基于容器的安全性。但我也强烈建议使用Apache Shiro。我是安全问题的新手,不知道可能是什么相关问题&如何处理它们。因此,我正在寻找能够通过其默认设置/单独处理大多数安全问题的东西。

就我的应用程序要求而言,我有一个社交应用程序,其中具有不同角色的用户可以访问不同的页面集,并可以根据他们的角色在这些页面上使用不同级别的功能。

在那种情况下,您认为对我来说可能是个不错的选择?

我个人已经确信选择Shiro,因为它很容易使用,并为新手处理大部分事情。

3 个答案:

答案 0 :(得分:17)

我喜欢Shiro的是,设置基于权限的安全性非常容易。 JAAS基于角色,这对于消费者Web应用程序而言比对企业应用程序更有用,具有讽刺意味的粒度(正如我们可以从您的要求中注意到的那样)。

  • 应用程序服务器通常在JAAS之上提供一些服务,例如单点登录,内置登录模块等,因此有时当不需要权限粒度时,你应该选择JAAS。 / p>

  • 上次我检查Shiro也不支持相互ssl身份验证(使用数字证书),但你可能不会使用它...

  • 如果您使用Shiro,您的应用程序可能在应用程序服务器/ servlet容器之间更容易移植(哦,具有讽刺意味!),因为JavaEE安全配置往往是针对大多数非平凡设置的供应商特定。

总而言之,根据您指定的要求:

  • 使用AppServer(GlassFish,JBoss):JAAS(ootb authc / authz,内置登录模块)
  • 使用Servlet容器(Jetty / Tomcat):Shiro(更易于设置和使用)

希望有所帮助:)

答案 1 :(得分:4)

除了以下内容之外我对Apache Shiro一无所知,但你所引用的内容几乎逐字逐句地来自他们的Web page,其中包含几个错误陈述,例如'[JAAS]所需的静态定义,只有程序员才能改变'和'JAAS与虚拟机级别关注过于紧密联系',以及JAAS与用户和角色无关,这简直是错误的。我希望有很多令人信服的方法来摆脱容器管理的安全性。它是Servlet规范的一部分,因此必须由任何容器支持;它很好理解;它由JDK课程支持,没有第三方; ......它对我有用; - )

答案 2 :(得分:1)

我已经决定SpringSecurity(SS)将成为我们的身份验证和授权框架。主要是因为SS做OpenID和OAuth。我将不得不为权限/组/用户/实体系统定制它。我计划在'EntityManager / Entity'级别,服务级别和Web / API级别进行授权。 “锁上门,但是你的珠宝在后面的房间里有一个3吨的保险箱。”下半场很多Shiro处理得更好。但是,我并没有试图将openid4j / openauth4j集成到Shiro中。

挑选和选择两者的功能真的很不错,没有任何干扰或代码臃肿。这是最好的选择。

PS,Spring带来了许多其他的东西,比如与JSF的集成,因此它具有很大的吸引力。