【问题标题】:Is Spring ACL a good ACL implementation? [closed]Spring ACL 是一个好的 ACL 实现吗? [关闭]
【发布时间】:2011-04-27 22:48:06
【问题描述】:

我读过关于 Spring ACL 的文章,但它似乎不是很能干。例如:

  1. 无法列出具有权限 Y 的所有类型 X 的对象
  2. 无法为新部署自动创建架构

ACL 使用什么?将 ACL 与域模型如此解耦是不是很聪明?

【问题讨论】:

  • 你最后做了什么?自己动手?

标签: java spring spring-security acl spring-security-acl


【解决方案1】:

我们尝试使用 Spring ACL 模型,但发现它很笨拙。我们最终推出了自己的、更简单(但也不太通用)的实现,然后编写了 Spring Security 部分(accessDecisionManagers、Voters、Interceptors)来处理我们的模式。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您可能想看看Apache Shiro

    来自站点:Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。借助 Shiro 易于理解的 API,您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。

    很多人更喜欢Shiro handles permissions的方式

    【讨论】:

    • Shiro 唯一的问题是没有 OpenID 或 OAuth。对此的主要问题报告已有 5 年历史,最多每周只得到一次关注。很遗憾,因为除此之外,Shiro 看起来真的很好,比 Spring 或 Spring ACL 简单得多
    【解决方案3】:

    如果使用 Hibernate,您可以通过将其添加到 persistence.xml 来自动针对 db 运行 acl 模式:

    <property name="hibernate.hbm2ddl.import_files" value="/import.sql"/>
    
    <property name="hibernate.hbm2ddl.import_files_sql_extractor" value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" />
    

    并将架构添加到/resources/import.sql

    您可以像这样列出具有权限 Y 的所有类型 X 的对象:

    select 
      *
    from acl_entry a 
    join acl_object_identity b on a.acl_object_identity = b.id
    join acl_class c on b.object_id_class = c.id
    where
      class = X
      and mask = Y
    

    但是,由于分页问题,​​Spring Security ACL 在行安全方面存在根本缺陷。如果您的数据库支持,您应该使用视图或内置工具在数据库中执行行安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2011-07-27
      • 2016-03-03
      • 2012-02-22
      • 2018-12-14
      • 1970-01-01
      • 2014-03-27
      相关资源
      最近更新 更多