【发布时间】:2011-04-27 22:48:06
【问题描述】:
我读过关于 Spring ACL 的文章,但它似乎不是很能干。例如:
- 无法列出具有权限 Y 的所有类型 X 的对象
- 无法为新部署自动创建架构
ACL 使用什么?将 ACL 与域模型如此解耦是不是很聪明?
【问题讨论】:
-
你最后做了什么?自己动手?
标签: java spring spring-security acl spring-security-acl
我读过关于 Spring ACL 的文章,但它似乎不是很能干。例如:
ACL 使用什么?将 ACL 与域模型如此解耦是不是很聪明?
【问题讨论】:
标签: java spring spring-security acl spring-security-acl
我们尝试使用 Spring ACL 模型,但发现它很笨拙。我们最终推出了自己的、更简单(但也不太通用)的实现,然后编写了 Spring Security 部分(accessDecisionManagers、Voters、Interceptors)来处理我们的模式。希望对您有所帮助。
【讨论】:
您可能想看看Apache Shiro。
来自站点:Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。借助 Shiro 易于理解的 API,您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。
很多人更喜欢Shiro handles permissions的方式
【讨论】:
如果使用 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 在行安全方面存在根本缺陷。如果您的数据库支持,您应该使用视图或内置工具在数据库中执行行安全。
【讨论】: