OpenLDAP:检索父DN

时间:2014-07-14 10:56:07

标签: openldap

我有什么:

我在openldap设置中有以下层次结构。 帐号&1; 39'有一个用户' Foo'。 基本DN是

o=MyCompany,dc=sanjose,dc=corp,dc=company,dc=edu

帐户直接位于基本DN下。

我想要的是什么:

我想显示用户' Foo'的帐号ID(此处为1-AA)。

我所知道/尝试过的事:

使用标准java ldap搜索

env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap://<host>:<port>/dc=sanjose,dc=corp,dc=company,dc=edu");
LdapContext ctx = new InitialLdapContext(env, null);
NamingEnumeration<?> namingEnum = ctx.search("o=MyCompany",
                "(user=Foo)", getSimpleSearchControls());
//hasNext loop
SearchResult result = (SearchResult) namingEnum.next();
System.out.println(result.getNameInNamespace());

现在问题是在上述情况下没有返回任何结果。但是,如果我尝试通过将搜索查询更改为

来获取帐户1-AA的DN
NamingEnumeration<?> namingEnum = ctx.search("o=MyCompany",
                "(Account=1-AA)", getSimpleSearchControls());

它工作正常。

如何在此处获取父DN。在英语中我只想说给我所有账户ID而用户= Foo。

1 个答案:

答案 0 :(得分:0)

假设搜索(user=Foo)确实会返回条目user=Foo,Account=1-AA,o=MyCompany,dc=sanjose,dc=corp,dc=company,dc=edu,那么javax.naming.ldap.LdapName可以让您完成其余的工作。 http://docs.oracle.com/javase/tutorial/jndi/newstuff/ldapname.html有一个从DN中获取前缀或后缀的示例。