何时从容器托管安全转向Apache Shiro,Spring Security等替代方案?

2022-09-02 13:17:06

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

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

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

在这种情况下,您认为对我来说什么是一个不错的选择?

我个人已经被说服选择Shiro,因为它易于使用,并为新手处理了大部分事情。


答案 1

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

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

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

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

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

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

希望它能帮助:)


答案 2

除了以下内容之外,我对Apache Shiro一无所知,但是您引用的内容实际上是从他们的网页中逐字记录下来的,其中包含几个错误的陈述,例如“[JAAS]需要只有程序员才能更改的静态定义”,以及“JAAS与虚拟机级别的关注点联系得太紧密”,以及JAAS与用户和角色无关的含义, 这是完全错误的。我想要很多令人信服的东西来摆脱容器管理的安全性。它是Servlet规范的一部分,因此它必须得到任何容器的支持;这是很好理解的;它由没有第三方的JDK类支持;...它对我有用;-)