【问题标题】:Security framework for java with object granularity具有对象粒度的 java 安全框架
【发布时间】:2010-12-13 09:42:57
【问题描述】:

我正在寻找具有对象粒度的 Java Web 应用程序的安全框架。

这意味着我不只是想通过 url 或角色进行过滤,而是通过系统内域对象的特定用户所有权进行过滤。

例如,如果有一个 Message 对象,它有一个 Sender 用户和一个 Receiver 用户,我希望能够对其进行配置,以便每条消息都可以被它的发送者 RW 和 RO接收器。

或者例如,所有用户都可以查看所有用户个人资料,但只能由所有者编辑。

这个规则,当然,我想用元数据(注解、xml文件等等)来定义它们,而不是嵌入到我的业务逻辑中。

世界上真的有这样的野兽吗?最好是开源的。

【问题讨论】:

  • 我对 Matt B 投了赞成票,但我建议在这里构建您自己的定制解决方案没有任何问题。通常倾向于尝试在通用框架中进行撬棍,而实际上,简单地编写自己的框架通常会降低风险/缩短开发时间,尤其是在您的权利模型听起来相当简单的情况下。
  • 尽管如此,通用框架很可能确实适合您的用例,而且可能不值得花时间重新发明轮子并遇到并解决所有问题图书馆作者已经解决了。与所有事情一样,这是一个平衡和一个决定。

标签: java security spring-security access-control


【解决方案1】:

Spring Security 可以使用 AOP 提供 method security and "secure objects" 之类的东西。

【讨论】:

    【解决方案2】:

    您正在寻找访问控制列表 (ACL)。与其他受访者一样,我认为 Spring Security 值得在这里查看——Acegi 正是 Spring Security 在重命名之前所使用的名称。 Spring Security 确实明确支持 ACL(除了基于 URL、基于角色和基于组的访问控制)。它支持 XML 和基于注释的配置。您可以将 ACL 过滤应用于视图(使用标记库来决定在 JSP 中呈现或抑制什么)、返回单个域对象的方法(决定是否允许方法调用成功)以及返回集合(在返回之前决定要从集合中过滤掉哪些对象)。

    您也许可以为简单的需求滚动自己的 ACL 代码,但在我看来,ACL 很快就会变得棘手。特别是如果您有很多领域对象,并且您必须开始认真对待性能管理。

    【讨论】:

    • 在查看了 Spring Security 中的 ACL 类之后,我不得不说我认为它们还没有准备好迎接黄金时段。我发现只使用安全/方法拦截器并针对我的业务对象构建我自己的业务逻辑要容易得多。
    【解决方案3】:

    查看此链接Acegi Security Fundementals - 它有点过时,但仍然为您提供了 Spring Security 对象级授权机制的主要概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2011-09-08
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2010-09-15
      相关资源
      最近更新 更多