1

我不是 Spring 4 的新手,但我是 Spring Security 4 ACL 的新手。我刚刚在我的 MVC Web 应用程序上实现了 Spring Security 4,它们都是后端 Web 服务。我所做的链接发布在这里:

http://stackoverflow.com/questions/33787085/spring-security-4-with-third-party-authentication-token

这增加了我的 URL 的安全性,只有具有特定角色的用户才能请求 URL。这很棒!我们以 SiteMinder 为例,我们没有传回用户名,而是在请求标头中传回了一个令牌。我们调用 OpenAM 并传入这个令牌,然后我们得到一个用户名。我们使用 Hibernate 身份验证从我们的数据库中获取用户信息,我们获取该用户的角色并为我们生成 UserDetails,这样,我们就有了这个经过身份验证的用户的 SecurityContext。

但现在我在同一个 MVC Web 应用程序中面临一个新挑战,那就是我想为我的对象添加 ACL 安全性。我已经做了大量的研究,还有更多的研究要做,我有几个问题。

看来我可以使用 ACL 表应用安全性(创建和/或检索和/或删除和/或更新和/或等)。我想知道是否可以像这样应用安全性:

userA    SomeCarObject     has permissions (create,read,update)
userB    SomeCarObject     has permissions (read)
roleA    SomeCarObject     has permissions (update)
roleB    SomeCarObject     has permissions (delete)

那么,用户和角色都可以对对象拥有不同的权限吗?

我们有三种不同的对象类型:汽车、动物、花卉。我们希望使用 ACL 来分配用户和角色,以便对这些对象类型中的每一个具有不同的权限。

这可以用 Spring Security 4 中的 ACL 来完成吗?你知道有什么好的例子吗?或者,我们是否必须拥有所有用户权限?所以如果我们的角色有 3 个用户,那么我们需要在 acl 表中有 3 个条目,每个用户一个?这就引出了一个问题……如果用户更改了角色,那么我们将不得不重新评估他们的权限,并且我们可能不得不在 ACL 表中添加或删除记录?

我也在研究权限是如何工作的。我们目前在旧系统中使用位掩码来跟踪权限,所以我们有 recursiveRead (1)、read (2)、write(4)、delete(8)、create(16)、upload(32)、 close(64) 等。似乎我们可以拥有 32 位权限,这对我们来说非常有用。

所以,我正在研究我们如何在 ACL 中定义这些权限。

当我获得更多信息时,我一定会在这里发布。谢谢!

4

1 回答 1

2

那么,用户和角色都可以对对象拥有不同的权限吗?

是的,Spring Security 中有一个叫做Sid的东西——安全身份,它可以是权限(角色)或主体(用户)。

假设您使用类似于参考文档中的数据库架构,您的 acl_sid 表应类似于:

 +----+-----------+-------+
 | id | principal | sid   |
 +----+-----------+-------+
 |  1 | true      | userA |
 |  2 | true      | userB |
 |  3 | false     | roleB |
 |  4 | false     | roleB |
 +----+-----------+-------+

然后在 ACL 中添加条目时使用此表中的 id。

这就引出了一个问题……如果用户更改了角色,那么我们将不得不重新评估他们的权限,并且我们可能不得不在 ACL 表中添加或删除记录?

这应该不是必需的,但要注意缓存。如果您在 ACL 表中添加/删除记录,请记住在AclCache使用时清除。

我也在研究权限是如何工作的。

默认权限在BasePermission类中定义并使用位掩码模式。但是请注意,Spring Security ACL 实现不处理同一 ACL 条目的多个权限;这意味着您必须添加一个用于创建的条目,一个用于读取的条目,等等。

于 2015-11-25T13:51:05.617 回答