在Java中的ldapContext中搜索所有子域

在Java中的ldapContext中搜索所有子域,java,active-directory,ldap,ldapconnection,Java,Active Directory,Ldap,Ldapconnection,我已经在Java中建立了一个LdapContext,并希望对其执行搜索。我正在连接到IP(ldap://1.1.1.20:389),根域为dc=false,dc=domain,dc=com。我希望验证此服务器上的用户,但用户分布在林中的多个域中。我正在尝试查询根级别以搜索用户的所有子域 我找到了本教程,并使用它尝试通过将我的LdapContext转换为DirContext来搜索根级别,就像在本教程中一样 ctx = new InitialLdapContext(env, null); DirCo

我已经在Java中建立了一个LdapContext,并希望对其执行搜索。我正在连接到IP(
ldap://1.1.1.20:389
),根域为
dc=false,dc=domain,dc=com
。我希望验证此服务器上的用户,但用户分布在林中的多个域中。我正在尝试查询根级别以搜索用户的所有子域

我找到了本教程,并使用它尝试通过将我的
LdapContext
转换为
DirContext
来搜索根级别,就像在本教程中一样

ctx = new InitialLdapContext(env, null);
DirContext root = (DirContext) (ctx.lookup(""));

SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchControls.setTimeLimit(30000);
ctx.setRequestControls(null);
NamingEnumeration<?> namingEnum = root.search("", "(CN=Bob Test)", searchControls);

while (namingEnum.hasMore())
{
    SearchResult result = (SearchResult) namingEnum.next();
    Attributes attrs = result.getAttributes();
    IDActive = true;            
}
ctx=new InitialLdapContext(env,null);
DirContext根=(DirContext)(ctx.lookup(“”);
SearchControls SearchControls=新的SearchControls();
searchControls.setSearchScope(searchControls.SUBTREE_范围);
searchControls.setTimeLimit(30000);
ctx.setRequestControls(null);
NamingEnumeration Namingeneum=root.search(“,”(CN=Bob Test)”,searchControls);
while(namingeum.hasMore())
{
SearchResult=(SearchResult)namingeum.next();
Attributes attrs=result.getAttributes();
IDActive=true;
}

这会导致出现
PartialResultException
。我可以搜索特定的位置,但我不知道如何从根目录正确地“滴入”我的搜索,以便它可以验证任何子域中的用户。谢谢

如果您需要搜索整个广告林,它应该与连接到全球目录一样简单。只需更改连接的端口即可(只要没有防火墙阻止连接):

全局目录也使用LDAP协议,但返回来自整个林的结果,而不仅仅是服务器的域。这里有几个警告:

  • 您不能对GC进行更改
  • 某些属性没有复制到GC(例如,)。因此,请注意,您无法在GC上获得通过常规LDAP可以获得的所有相同数据

  • 如果其中任何一个问题对您来说都是问题,您可以从GC获取
    DiscrimitedName
    ,然后使用它通过常规LDAP绑定到对象,以修改它或获取所需的额外数据。

    知道如何使用GC协议连接到全局编录吗?e、 g.GC://1.1.1.20:3268。当我尝试使用GC协议连接到LDAP时,我得到“java.net.malformedurexception:不是LDAP URL:@an没有“GC协议”。GC仍然使用LDAP。指定端口就足够了:
    ldap://1.1.1.20:3268
    某些语言允许您使用
    GC://
    而不是指定端口,但不允许指定Java。
    ldap://1.1.1.20:3268