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

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

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

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

在那种情况下,你觉得什么对我来说是个不错的选择?

我个人已经确信选择Shiro因为它易于使用并且为新手照顾大部分事情。

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

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

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

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

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

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

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

希望能帮助到你 :)

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

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

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