何时从容器管理安全转向Apache Shiro、Spring security等替代方案



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

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

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

如果是这样的话,你认为我应该选择什么呢?

我个人已经被说服选择Shiro,因为它很容易使用,并且为新手照顾了大部分的事情。

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

  • 应用服务器通常在JAAS之上提供一些服务,如单点登录,内置loginmodules等,所以有时当权限粒度不是要求时,您应该选择JAAS。

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

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

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

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

希望有帮助

除了以下内容外,我对Apache Shiro一无所知,但是您所引用的内容实际上是逐字逐句地来自他们的Web页面,其中包含一些错误陈述,例如"[JAAS]需要只有程序员才能更改的静态定义","JAAS与虚拟机级别的关注过于紧密地联系在一起",以及暗示JAAS与用户和角色无关,这完全是错误的。我希望有很多人能说服我放弃容器管理的安全性。它是Servlet规范的一部分,所以它必须得到任何容器的支持;这是很容易理解的;它由JDK类支持,没有第三方;…它适用于我;-)

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

如果能在没有任何干扰和代码膨胀的情况下选择两者的特性,那就太好了。那是最佳选择。

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

最新更新