java - 使用 Spring Security ACL - 如何将对象的 READ 权限分配给所有用户(注册和匿名)?

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

向所有用户(注册用户和匿名用户)授予对象读取权限的最佳方式是什么?我正在开发一个系统,用户可以创建任何人都可以查看的项目,但只能由创建者或管理员用户编辑。

想到的一个解决方案是 Spring 为未经身份验证的用户提供角色 ROLE_ANONYMOUS,我可以将其更改为 ROLE_USER 并将其提供给所有经过身份验证的用户,这样每个人都是 ROLE_USER。然后,所有可公开查看的实体都将获得为 ROLE_USER 插入的 READ 权限,从那里我可以使用组 (GrantedAuthoritySid) 来确定您是否有权访问(每个人都有权访问)。

我想知道是否有更好的方法来实现这一目标,而无需向 ROLE_USER 对每个公共(public)对象授予 READ 权限?

最佳答案

如果任何人都可以查看相关对象,则无需对它们应用 ACL。仅将 ACL 应用于修改此类对象的操作。

如果每个对象的可见性(公共(public)/私有(private))是可配置的,您可以为其使用专用标志并通过此标志驱动可见性(例如通过 expression-based access control )。

但是,如果您也想对此类对象坚持使用 ACL,则可以创建专用角色(例如 ROLE_READER),并在进行身份验证时将该角色动态分配给匿名用户和经过身份验证的用户。

请参阅类org.springframework.security.core.authority.mapping.SimpleAuthorityMapper,它可以配置默认权限(在您的情况下为ROLE_READER)以分配给所有用户。然后在身份验证过程中使用映射器。由于您没有指定用户的身份验证方式,我假设用户名/密码架构和默认的 org.springframework.security.authentication.dao.DaoAuthenticationProvider 。如果仔细观察该类,您会发现可以设置要使用的权限映射器。

对于匿名用户,您可以将默认权限设置为org.springframework.security.web.authentication.AnonymousAuthenticationFilter的构造函数参数。

关于java - 使用 Spring Security ACL - 如何将对象的 READ 权限分配给所有用户(注册和匿名)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482688/

相关文章:

java - 如何从 Hibernate 获取自定义类型的数据库方言?

带有刷新 token 工作流程问题的 Java Spring JWT

java注释创建所有可能的构造函数

java - 客户端证书握手失败的 TLS

java - 为什么 JpaRepository 的删除方法实际上并没有从数据库中删除元素?

spring-security - BadCredentialsException 预期,但得到 AccountExpiredException

java - 不使用 Spring Security 身份验证?

java - 如何在 solr 结果中获取构面范围?

java - 在命令行中查看 SDK 使用情况

java - 从 Cloud Foundry 下载已部署的 War