我有什么:
我在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的DNNamingEnumeration<?> namingEnum = ctx.search("o=MyCompany",
"(Account=1-AA)", getSimpleSearchControls());
它工作正常。
如何在此处获取父DN。在英语中我只想说给我所有账户ID而用户= Foo。
答案 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中获取前缀或后缀的示例。