高级 Java 安全框架

2022-09-02 13:40:11

您在 Java 项目中使用什么安全框架?

我使用Spring Security和Apache Shiro,它们看起来都不成熟。

弹簧安全缺陷:

  1. 对权限没有本机支持;
  2. 无法在Java代码中显式使用(有时这是必要的);
  3. 过于关注经典(非AJAX)Web应用程序。

Apache Shiro的缺陷:

  1. 最终版本中的错误(如Spring集成的问题);
  2. 不支持OpenID和其他一些广泛使用的技术;
  3. 报告了性能问题。

他们两人也都缺乏文件。

也许大多数真正的项目都开发了自己的安全框架?


答案 1

至于Apache Shiro:

我不知道你为什么列出你做过的事情:

  1. 毫无疑问,世界上每个项目都有发布错误。然而,这里的关键是Shiro的团队反应迅速,并尽快修复它们。这不是评估框架的东西,否则你会删除每个框架,包括你自己编写的任何框架。
  2. OpenID支持将很快在Shiro 1.2中发布 - 也许一个月后?
  3. 什么性能问题?从来没有人向开发列表报告过性能问题,特别是因为Shiro中的缓存支持是广泛而一流的。如果没有澄清或参考,这被称为FUD。
  4. 文档现在真的很好 - 我最近看到的一些最好的开源文档(它在2周前重新编写)。你有没有具体的例子来说明它对你来说不足的地方?

我很想提供帮助,但你担心的是没有参考或具体例子支持的概括。也许你可以代表你的项目需要的具体事情,到目前为止你还没有完成?

Apache Shiro仍然是Java和JVM语言中最灵活,最容易理解的安全框架 - 我怀疑你会找到更好的。

但是,最重要的是,我真诚地表示这一点,除非您打算投入大量时间,否则请不要编写自己的安全框架。我见过的几乎每一家试图自己做这件事的公司都惨遭失败。要做到“正确”(和安全)真的很难。相信我 - 在写了8年之后,这是我绝对确定的一件事:)

无论如何,请随时加入Shiro用户列表,您一定会发现社区很高兴并愿意解决您可能遇到的任何问题。您会发现,我们照顾那些提出问题并尽最大努力提供帮助的人。

呵呵!


答案 2

我目前的项目使用SpringSecurity,并涉及做你声称是SpringSecurity缺陷的所有三件事:

  • 这些项目实现的细粒度访问规则超越了简单的ROLE,并且涉及域对象的状态、额外的请求参数等。这些是使用在我的 MVC 控制器中调用的自定义“访问策略对象”实现的。但是,访问检查失败会通过引发相关异常来返回给SpringSecurity。(这些可以作为标准的SpringSecurity方法级拦截器实现,但检查通常涉及检查域对象。

  • 这些项目同时支持 Web 和 AJAX 访问,并且对于这两种情况,以不同的方式处理访问失败。这是通过为SpringSecurity编写一些自定义身份验证入口点组件来完成的,这些组件根据请求URL等在不同的身份验证行为之间进行选择。

换句话说,它可以做到...

话虽如此,我同意你的观点:

  • 连接这种东西并不容易。在使用元素及其关联的配置器时,我不断遇到障碍。喜欢。。。您希望它使用不同版本的组件 X。但要做到这一点,你还必须替换Y,Z,P和Q。<http>

  • 文档非常稀疏,如果您尝试执行一些不同寻常的事情,则没有帮助。