【问题标题】:ldap search filter with javaldap搜索过滤器与java
【发布时间】:2011-01-17 00:47:00
【问题描述】:

我在使用 ldap 搜索过滤器时遇到问题。 我想搜索根节点的所有子节点。我想要电子邮件的用户名包含查询字符串的用户。 例如,如果我有

  • foo_l.c_bar@foobar.com
  • foobar@foo_l.c_bar

搜索查询是“l.c”我只想要 foo_l.c_bar@foobar.com

以下代码令人惊讶地返回第一个和第二个。

String query = "...";
DirContext dc = ...;
NamingEnumeration<SearchResult> ne = dc.search(root,
    "(email=*{0}*@*)",
    new Object[] { query }, null);

"*...*@*" 查询过滤器有什么问题?

【问题讨论】:

    标签: java string search filter ldap


    【解决方案1】:

    我不能给你一个完整的答案,但是如果你从命令行尝试使用过滤器"(email=*l.c*@*)"ldapsearch,你应该得到正确的记录......所以我会说问题出在 Java 方法和不在过滤器中。

    希望对你有帮助。

    【讨论】:

    • 不幸的是 ATM 我没有安装 ldapsearch 的 linux 机器。我拥有的唯一 ldap 管理器是 JXplorer,它返回所有记录,而不仅仅是正确的记录。 AFAIK它是用java本身写的,所以我不知道是我还是java。
    【解决方案2】:

    我假设您忘记粘贴格式化查询及其 {0} 参数的代码? 编辑:哇,忘了我,我什至不知道采用 filterArgs 数组的方法。

    附带说明一下,inetOrgPerson 中电子邮件地址的标准属性是“mail”而不是“email”(当然,在您的情况下可能会有所不同)

    【讨论】: