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
是超类的私有成员,因此您需要记住类中的该实例(查看建议的构造函数的主体)。