19

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

我很困惑人们什么时候选择使用 Shiro、Spring Security 或 owasp 的 esapi 等安全替代方案,而留下容器管理的安全性。在看到 Stack Overflow 上的一些相关问题后,我意识到过去 JSF 开发人员更喜欢基于容器的安全性。但我也被强烈推荐使用 Apache Shiro。我在安全问题方面是新手,不知道可能是什么相关问题以及如何处理它们。因此,我正在寻找可以通过其默认设置/自行处理大多数安全问题的东西。

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

在那种情况下,您认为我可以选择什么?

我个人一直被说服选择 Shiro,因为它易于使用并且可以为新手处理大部分事情。

4

3 回答 3

17

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

  • 应用服务器在 JAAS 之上提供一些服务是很常见的,例如单点登录、内置登录模块等,所以有时当不需要权限粒度时,您应该使用 JAAS。

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

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

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

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

希望能帮助到你 :)

于 2011-10-16T19:31:45.777 回答
4

除了以下内容外,我对 Apache Shiro 一无所知,但您所引用的内容实际上是从他们的网页中逐字记录的,其中包含一些错误陈述,例如“[JAAS] 需要只有程序员才能更改的静态定义”和“JAAS 是过于依赖虚拟机级别的问题”,并且暗示 JAAS 与用户和角色无关,这完全是错误的。我希望有很多说服力来摆脱容器管理的安全性。它是 Servlet 规范的一部分,因此任何容器都必须支持它;很好理解;它由没有第三方的 JDK 类支持;...它对我有用;-)

于 2011-10-16T09:29:21.190 回答
2

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

在没有任何干扰或代码膨胀的情况下选择两者的功能真的很不错。那是最好的选择。

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

于 2012-12-28T02:52:50.440 回答