如何更新acl_sid Spring 安全 ACL 表中的用户名



ACL_SID Spring 安全 ACL 中使用的表包含用户名作为列之一。我想知道修改此值的最佳方法。例如,当与现有用户对应的用户名发生更改时,这是必需的。看起来JdbcMutableAclService不支持此功能。任何帮助,不胜感激。

谢谢拉古

您可以扩展类JdbcMutableAclService并添加所需的新方法。

在构造函数中,您可以创建JdbcTemplate的实例:

public YourClassName(DataSource dataSource, LookupStrategy lookupStrategy, AclCache aclCache) {
    super(dataSource, lookupStrategy, aclCache);
    this.jdbcTemplate = new JdbcTemplate(dataSource);
    this.aclCache = aclCache; 
}

现在,可以在新方法中使用该JdbcTemplate来更新 SID 的用户名。

jdbcTemplate.update("update acl_sid set sid = ? where sid = ?", newUsername, oldUsername);

记住唯一约束

constraint unique_uk_1 unique(sid,principal)

JdbcTemplate可以在发生故障时抛出DataAccessException。例如,当数据库中已存在具有该名称的 SID 时,将引发DataIntegrityViolationException

还要记住交易。

如您所见,Spring Security 正在使用AclCache来更有效地执行。您最好在每次用户名更新时从该缓存中逐出所有内容。您可以使用void clearCache();方法。 AclCache是超类的私有成员,因此您需要记住类中的该实例(查看建议的构造函数的主体)。

最新更新