1

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

谢谢,拉古

4

1 回答 1

1

您可以扩展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。例如DataIntegrityViolationException,当您的数据库中已存在具有该名称的 SID 时,将引发此问题。

还要记住交易。

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

于 2012-11-14T22:33:13.560 回答