java - 如何清除 UserPrincipal 缓存

标签 java active-directory acl

以下代码返回给定组名的 UserPricipal。但是删除组后,此代码仍然返回给我一个 UserPrincipal (已删除的)。有没有办法删除这个“缓存”?

UserPrincipalLookupService upls=fs.getUserPrincipalLookupService();
UserPrincipal who;
try {
    who = upls.lookupPrincipalByName("myDeletedGroupName");
} catch (IOException e1) {
    // TODO Auto-generated catch block
return;
}

因为设置 Windows ACL 时我需要 UserPrincipalName。重新创建具有相同名称的已删除组后,ACL 将设置为旧组而不是新组 - 当查看 Windows-GUI 时,我在 ACL 列表中看到旧的 objectSid 而不是新组(-名称)。

步骤简述:

    1. creating AD Group "xxxx"
    2. setting ACL in File f for xxxx
    3. deleting Group "xxxx"
    4. deleting ACL
    5. create new Group "xxxx" in AD 
    6. setting ACL in File f for xxxx
    -> the OldSid from the deleted Group is the ACL Principal

最佳答案

Active Directory 是一个分布式系统。可能有多个域 Controller 服务于同一个域。因此,在通过一个域 Controller 从 Active Directory 中删除对象后,您仍然可以在复制开始之前在另一台域 Controller 上找到已删除的对象。

即使您只有一个域 Controller ,您仍然需要注意您正在使用哪种服务。有普通的LDAP服务和全局目录服务。全局编录服务是来自同一林中不同域(包括您的本地域)的对象的缓存。其目的是允许用户在同一 Active Directory 林中的所有域中进行全局搜索。您会在 Global Catalog 上发现类似的问题。在域 Controller 上删除对象后,您仍然可以从全局编录中找到已删除的对象,直到复制开始。好消息是在同一域 Controller 内,这种复制通常会很快发生。

我不熟悉 Java 中的 UserPrincipalLookupService,但很可能它使用全局目录来查找用户主体。您可能需要检查该类是否允许您指定执行查询时要使用哪个域 Controller 以及要使用哪个全局编录。如果类不允许您指定服务器,恐怕您必须等待复制。

关于java - 如何清除 UserPrincipal 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461046/

相关文章:

ruby-on-rails-3.1 - 使用修改的预序树遍历的 Rails ACL

c++ - 在向对象添加 ACE 后,是否有一种规范的方法可以对对象的 DACL 进行重新排序?

php - 应用 Magento SUPEE 6285 后拒绝访问

java - java.lang.Exception:java.lang.ClassCastException:org.apache.hadoop.io.Text无法转换为org.apache.hadoop.io.IntWritable

java - Spring aspectj 注释切入点

java - 数据完整性违规异常 : Data truncation regarding PreparedStatementCallback

python - LDAP 查询过滤具有 *x* 等组的用户

java - java 11 HTTP 客户端上的 "java.io.IOException: Connection timed out"VS HttpTimeoutException

c# - 检查 Active Directory 帐户是否被锁定 (WPF C#)

asp.net - 尝试通过ASP.NET更改AD中的密码 "user must change"