JAVA LDAP:我如何获得Dn?

时间:2015-10-05 15:04:30

标签: java ldap

我做了一个LDAP目录搜索并收到了一些结果。我需要迭代这些结果并显示每个条目的Dn。

在我的测试环境中,我通过获取entryDN属性的值返回了Dn值。

在生产环境中,entryDN属性始终返回null。

在两种环境中,当我返回Dn属性的值时,我得到的只是null。

我真正需要做的是从任何环境中可靠地获取Dn。

连连呢?

2 个答案:

答案 0 :(得分:0)

为了可靠地获取Dn,请使用方法SearchResult.getNameInNamespace();

答案 1 :(得分:0)

以user2135970的答案为基础,将JNDI与Spring LDAP混合并不是很漂亮,但是可以做到:

  private String getDistinguishedName(String addtlFilter) throws NamingException {
    String dn = null;
    LdapContextSource contextSource = (LdapContextSource) ldapTemplate.getContextSource();
    SearchControls ctrls = new SearchControls();
    ctrls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    DirContext dc = null;
    try {
      dc = ldapTemplate.getContextSource().getContext(contextSource.getUserDn(), contextSource.getPassword());
      final String filter = String.format("(&(%s)%s)", addtlFilter, searchFilter);
      NamingEnumeration<SearchResult> results = dc.search(searchBase, filter, ctrls);
      if (results.hasMore()) {
        dn = results.next().getNameInNamespace();
      }
    } finally {
      if (dc != null) {
        dc.close();
      }
    }
    return dn;
  }