Я пытаюсь получить адрес электронной почты, заданный в Active Directory, с указанным каноническим именем через JND. Я пробовал тот же процесс с другими параметрами (например, 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. Так есть ли другой способ его поиска?