首页 > 解决方案 > JND InvalidSearchFilterException - 如何在 LDAP 中搜索规范名称?

问题描述

我正在尝试通过 JND 将 Active Directory 中设置的电子邮件地址检索为指定的规范名称。我之前用其他参数(例如 sAMAccountName、主体名称或邮件)尝试了相同的过程,但是这一次,它不起作用。

initializeLDAP();
String searchFilter = "(&(objectClass=user)(canonicalName=" + name + "))";
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String returnedAttributes[] = { "mail" };
searchControls.setReturningAttributes(returnedAttributes);
NamingEnumeration<SearchResult> results = ctx.search(ldapSearchBase, searchFilter, searchControls);
SearchResult searchResult = null;
searchResult = results.nextElement();

if (searchResult.getAttributes().get("mail") != null
                    && searchResult.getAttributes().get("mail").get() != null) {
    logger.info("mail to canonical name {} is {}", name,
    searchResult.getAttributes().get("mail").get());
                mail = (String) 

searchResult.getAttributes().get("mail").get();
   ...}

我在这条线上得到以下异常NamingEnumeration<SearchResult> results = ctx.search(ldapSearchBase, searchFilter, searchControls);

javax.naming.directory.InvalidSearchFilterException: [LDAP: error code 18 - 0000216B: AtrErr: DSID-031404E3, #1:
    0: 0000216B: DSID-031404E3, problem 1004 (WRONG_MATCH_OPER), data 0, Att 90394 (canonicalName)

我宁愿搜索不同的参数,但不幸的是,规范名称是我从 powershell 脚本输出中获得的全部。那么有没有其他方法可以搜索呢?

标签: javapowershell

解决方案


没关系。

我读到规范名称是一个组合属性,因此不可搜索。我在最后一个之后剪切了规范名称字符串,/并使用它来搜索cn哪个工作正常。


推荐阅读