有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何清除UserPrincipal缓存

以下代码返回给定Groupname的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,而不是新组(-name)

简而言之,步骤如下:

    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

共 (1) 个答案

  1. # 1 楼答案

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

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

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