Spring security 基于记录所有者的Spring webapp安全性

Spring security 基于记录所有者的Spring webapp安全性,spring-security,Spring Security,假设我有用户和文章 匿名者可以列出和阅读文章。 只有已注册和已登录的用户才能创建文章。 用户只能编辑自己的文章。 当然,管理员可以做任何事情。 我看过SpringSecurity,但没有找到一种方法。我的应用程序不需要角色,ACL对此来说太重了 也许我应该实现我自己的安全性?你说得对,ACL对这项任务来说太难了 您可以在JSP中使用Spring Security的authorize标记,它通过principal对象提供对登录用户的访问。将编辑文章的权限限制为具有给定用户名的用户的示例: <

假设我有用户和文章

匿名者可以列出和阅读文章。
只有已注册和已登录的用户才能创建文章。
用户只能编辑自己的文章。
当然,管理员可以做任何事情。

我看过SpringSecurity,但没有找到一种方法。我的应用程序不需要角色,ACL对此来说太重了


也许我应该实现我自己的安全性?

你说得对,ACL对这项任务来说太难了

您可以在JSP中使用Spring Security的authorize标记,它通过
principal
对象提供对登录用户的访问。将编辑文章的权限限制为具有给定用户名的用户的示例:

<sec:authorize access="hasRole('SOME_PRIVILEGE_OR_ROLE') and ${someArticle.username} == principal.username">
    ...
</sec:authorize>

...
请注意,某些权限或角色可以是“登录用户”之类的角色,但也可以指定特定的权限,例如“阅读文章”或“更新文章”。Spring Security在这里是灵活的。无论您选择什么,它都需要位于用户对象的GrantedAuthories集合中

还请注意,您可以实现自己的用户对象,向UserDetails界面提供的内容添加更多信息,例如,比较用户id而不是用户名


最后,请注意,您需要一个最新版本的Spring Security(>=3.1),Spring EL才能像示例中那样工作。

什么是“我的应用程序不需要角色”?您刚才自己描述了角色。我只需要匿名和登录用户。对于管理员,我可以在另一个站点区域进行操作,但这些仍然是角色。您需要安全性做什么?如果匿名用户和登录用户都可以访问相同的URL,那么是的,您可能不需要spring安全性或任何安全性。是这样吗?谢谢,这样行得通。对于那些喜欢编程方式的人(比如我)。您可以使用@PreAuthorize(“hasRole('ROLE_USER')和#someArticle.creatorId==principal.id)注释控制器方法,其中#someArticle是方法参数