java - 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 脚本输出中获得的全部。那么有没有其他方法可以搜索呢?
解决方案
没关系。
我读到规范名称是一个组合属性,因此不可搜索。我在最后一个之后剪切了规范名称字符串,/
并使用它来搜索cn
哪个工作正常。
推荐阅读
- angular - Value change is not reflected immediately on components Angular inside Cordova
- sql - PROC SQL 中极其简单的列操作
- java - 使用 Java Selenium 进行测试自动化 - 使用 JavaMail 检查确认电子邮件 - 如果电子邮件迟到几秒钟,则不会收到邮件
- c++ - 我们是否需要派生类中的虚拟析构函数
- javascript - 在使用 jquery 的最大选项之后不要在选择框中显示选项
- android - 每当我收到来自 Firebase 的通知时,如何打开我的屏幕?
- c# - 为什么我不能从 int 转换为字符串 C# ASP.NET CORE MVC
- queue - xQueue ESP32 无法发送两个命令
- spring-boot - 在 Spring Boot 中提供默认配置库
- python-3.x - 索引超出范围问题。希望得到一些反馈