【问题标题】:High level Java security framework高级 Java 安全框架
【发布时间】:2011-09-08 12:03:09
【问题描述】:

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

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

Spring 安全漏洞:

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

Apache Shiro 缺陷:

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

两者都缺乏文档。

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

【问题讨论】:

  • 恕我直言,您的问题太模糊了。您对哪些方面感兴趣?
  • Spring Security 有角色,可用于“权限”。而“无法在 Java 代码中显式使用”是什么意思?
  • @user384706 我对一个结合了 SS 和 Shiro 优点的框架感兴趣,比如方便的权限模型和 OpenID 支持,并且没有描述它们的缺陷。
  • @matt 您自己回答了第一个问题。您说:“可用于许可的角色”。必须有正常的用户角色权限模型,而不是“角色作为权限”。目前 SS 对权限的支持看起来像这样:编写你自己的全功能 PermissionEvaluator 并且你很幸运。
  • @matt b “无法在 Java 代码中显式使用”意味着没有 SecurityContext.hasPermission("add_contact") 甚至没有 SecurityContext.hasRole("manager") 这样的方法。看到这个:[链接]stackoverflow.com/questions/3021200/… 那么,如何使用 SS 创建条件安全逻辑?当然我可以自己编写这样的方法,但我的问题是:是否有任何安全框架已经包含所有基本内容?

标签: java security spring-security shiro


【解决方案1】:

至于 Apache Shiro:

我不确定你为什么列出你所做的事情:

  1. 世界上的每个项目都有发布错误,毫无疑问。然而,这里的关键是 Shiro 的团队反应迅速并尽快修复它们。这不是评估框架的东西,否则您将消除每个框架,包括您自己编写的任何框架。
  2. OpenID 支持将很快在 Shiro 1.2 中发布 - 也许一个月后?
  3. 什么性能问题?没有人曾经向开发者列表报告过性能问题,尤其是 Shiro 中的缓存支持广泛且一流。没有澄清或参考,这就是 FUD。
  4. 现在的文档实际上非常好 - 我最近看到的一些最好的开源文档(两周前重新编写过)。您是否有具体的例子说明它在哪些方面不适合您?

我很乐意为您提供帮助,但您的顾虑只是泛泛而谈,没有参考资料或具体示例的支持。也许您可以代表您的项目需要的具体事情,而您迄今为止未能完成?

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

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

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

HTH!

【讨论】:

  • 你好莱斯。感谢您的回答。没办法我想说Shiro不好。我真的很喜欢 Shiro 的模型,但我不确定它是否足够成熟,所以我询问了任何人使用 Shiro 的经验。目前看来 SS 更受欢迎(更多关于 SS 的参考资料)。
  • 关于您的问题: 1. 当我尝试使用您站点中的文档将 Shiro 与 Spring 集成时,我遇到了问题,即我的注释事务被该配置禁用。 2. 如果您打算添加对 OpenID 和其他有用功能的支持,那就太好了。 3. 嗯……有人回答了 Shiro 在高负载站点上的性能问题,但我现在找不到。你不是删了吗? (开个玩笑)
  • 4.关于配置领域的文档似乎很少。可能只有我有这个问题,但配置不明显。
  • @Andrey:1. 我们以前没有听说过 - 如果您要打开 Jira 问题,我们会处理! 4.shiro.apache.org/realm.html(“领域配置”)。它们的配置与任何其他 pojo 一样。但是我们还能做些什么来让它变得更好/更容易呢?我很乐意提供帮助!无论如何,我认为您会发现 Shiro 社区和开发团队非常乐于助人。这和简单的 API 使我们成为了一个不错的选择 ;)
  • 发布openId的月份变成了一年。 openId 和 OAuth 有多接近?两个问题都显示 1 个月没有提交
【解决方案2】:

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

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

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

也就是说,可以做到……

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

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

  • 文档非常稀少,如果您尝试做一些与众不同的事情,这将无济于事。

【讨论】:

  • @Stephen C 嗯,这就是我们在 SS 中所拥有的——需要自己编写大量代码。
  • @Andrey - 不是很多。我有大约 2.3k 行与 SS 相关的 Java 代码,但主要与实现 Shibboleth、OpenId、自定义 SSO 方案和混合登录方案有关。如果我必须自己实现这一切,我将拥有更多数量级的安全性、身份验证和访问控制代码。
  • @Stephen C 感谢您的回答!你试过Shiro吗?我有一种感觉,虽然 Shiro 看起来很有趣,但它不像 SS 那样成熟和得到很好的支持。
  • @Andrey - 另一点是您不可避免地需要编写自己的代码来实现有条件的(例如依赖于对象状态的)访问控制方案。
  • @Andrey - Shiro 在 Apache 组织工作了 3 年,在此之前还有 5 年,称为 JSecurity。它绝对是成熟的,它甚至得到了 Katasoft 的专业支持:katasoft.comHTH!
【解决方案3】:

安德烈,我认为这个答案来得太晚了,对你没有帮助;它适用于稍后登陆此主题的人,我希望它有所帮助。

我的公司最近以开源的形式发布了OACC,这是一个高级 Java 应用程序安全框架。 OACC 专为需要对象级安全粒度的系统而设计。

OACC 提供了一种高性能 API,可提供基于权限的授权服务。简而言之,OACC 允许您的应用程序通过回答以下问题来强制执行安全性:是否允许实体“A”对实体“B”执行操作“p”?

OACC 中的一个关键抽象是资源resource 在 OACC 中充当应用程序域中需要保护的对象的占位符。参与者(例如用户、进程)和受保护的对象(例如文档、服务器)在 OACC 中都表示为资源。作为参与者或受保护的应用程序域对象只需将资源 ID 存储到相关资源。

与其他主要安全框架不同,资源抽象允许 OACC 提供丰富的 API 来管理资源之间的权限。 OACC 在 RDBMS 表中保持安全关系(目前支持 DB2、Oracle、MS-SQLServer 和 PostgreSQL)。

更多信息请查看项目网站:http://oaccframework.org

【讨论】:

    【解决方案4】:

    我们在其中一个项目中使用了分层安全性。图层如下:

    1. HTTPS 作为协议 (Apache-AJCConnectors-TomcatServlets)
    2. 仅在客户端和 servlet 之间传输二进制对象
    3. 传递对象中的各个元素(无论哪种方式)都被加密
    4. 加密密钥是动态的,在初始握手期间设置,有效期为 1 个会话

    从概念上讲,安全性由加密密钥、加密算法和应用它的数据组成。我们确保在通信期间不会同时传递 3 个以上的 1 个。希望有帮助。问候, - 多发性硬化症。

    【讨论】:

    • 我的问题是关于高级安全框架而不是加密。高级安全框架是一种允许管理角色和权限检查的框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2011-02-08
    • 2012-04-05
    • 2011-07-03
    • 2011-04-23
    • 2018-11-04
    相关资源
    最近更新 更多