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

Raj*_*pta 19 java security jsf jaas shiro

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

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

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

在那种情况下,您认为对我来说可能是一个很好的选择吗?

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

小智 17

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

  • 应用程序服务器在JAAS之上提供一些服务是很常见的,例如单点登录,内置登录模块等,因此有时当不需要权限粒度时,您应该选择JAAS.

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

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

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

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

希望能帮助到你 :)


use*_*421 4

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

  • @EJB 关于您的评论,“这是很好理解的”:根据我的经验,没有什么比事实更离谱的了。每次我在全国各地展示 Shiro 时,我都会问观众“这里有多少人使用 JAAS?”。平均而言(这并不夸张),每 100 人中大约有 5 人举手。是的,没错,5%。当被问到后续问题“有多少人喜欢它?” 那五个人总是把手放下。没有一只手站起来。Shiro 比 JAAS 更容易使用。在你注销一个你说你一无所知的解决方案之前,我建议你先尝试一下:) (3认同)
  • 但是*据我所知,*容器管理的安全性并没有涵盖可以满足Web应用程序安全需求的所有内容,并且对于新手(在Web安全领域)来说配置起来并不容易?我想这些是相同的限制/缺点!? (2认同)
  • @EJB您对OP是否应该使用Shiro做出了判断,“在对Apa​​che Shiro一无所知的情况下”。而且这些说法也并非错误:Java 安全策略文件是静态的,需要程序员更改它们,ProtectionDomain 和 CodeSource 是非常特定于 VM 的问题。并且没有暗示用户/角色 - 只是 JAAS 支持它们的方式与 Shiro 相比很难使用。干杯! (2认同)