gpt4 book ai didi

java - LDAP 按电子邮件值搜索找不到记录

转载 作者:行者123 更新时间:2023-11-30 06:39:40 25 4
gpt4 key购买 nike

我编写了一个 Java 应用程序,它通过 LDAP 搜索 Active Directory 以获取用户信息。我有一个传入的自定义 Person 类的实例列表。在其中我定义了 DN 或电子邮件。我正在相应地修改搜索条件。这是代码:

for (Person person : members) {
boolean ready = false;
String filter = getConfig().getUserSearchFilter();
// (&(|(objectclass=user)(objectclass=person)(objectclass=inetOrgPerson)(objectclass=organizationalPerson)))
String base = person.getDistinguishedName();
if (base != null && !base.isEmpty()) {
ready = true;
} else if (person.getEmail() != null) {
base = getConfig().getMemberSearchBase();
// ou=Users,ou=Managed,dc=division,dc=company,dc=com
String mail = person.getEmail();
StringBuilder filterBuilder = new StringBuilder(filter);
int pIdx = filterBuilder.lastIndexOf(")");
filterBuilder.insert(pIdx, "(|(mail=" + mail + ")(x-personalmail=" + mail + "))");
filter = filterBuilder.toString();
LOG.debug("New value of a filter = {}", filter);
ready = true;
}
if (ready) {
try {
NamingEnumeration<SearchResult> search = getContext().search(base, filter, searchControls);
...
} catch (NamingException nex) {
throw new IOException(nex);
}
} else {
LOG.error("Incorrect search criteria for user {} of group {}. Person skipped", person.getName(), this.group.getName());
}
}

代码工作正常,没有错误,但是当指定 DN 时,它确实找到了一个人,但当定义了电子邮件时,它什么也找不到。但是,如果我复制生成的过滤器字符串并将其以以下形式传递给 ldapsearch 命令:

ldapsearch -LLL -x -H ldaps://my.ldap.server.com -D 'svc-acct@corp-dev.company.com' -W -b "ou=Users,ou=Managed,dc=division,dc=company,dc=com" '(&(|(objectclass=user)(objectclass=person)(objectclass=inetOrgPerson)(objectclass=organizationalPerson))(|(mail=person@domain.com)(x-personalmail=person@domain.com)))'

它确实完美地找到了这个人。有人遇到过类似的问题吗?您发现我的代码有任何缺陷吗?请帮助我。

最佳答案

我确实找到了问题的原因。在搜索控件中,我将范围定义为OBJECT_SCOPE。当您指定 DN 时,它确实有效,但如果按每个字段进行搜索,则无法找到对象。我将范围更改为 SUBTREE_SCOPE,一切都开始按预期工作。

关于java - LDAP 按电子邮件值搜索找不到记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44600188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com