我编写了一个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时,它确实找到了一个人,但当定义email时,它什么也找不到。但是,如果复制生成的筛选器字符串并将其以以下形式传递给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=inetorgPerson)(ObjectClass=organizationalPerson)((mail=Person@domain.com)(x-PersonalMail=Person
它确实完美地找到了这个人。有人面临过类似的问题吗?你看到我的代码有什么缺陷吗?拜托,一定要帮帮我。
我确实找到了我问题的原因。在搜索控件中,我将作用域定义为object_scope。当您指定DN时,它确实工作,但是对于每一个字段的搜索,它无法找到对象。我将作用域更改为SUBTREE_SCOPE,一切都按预期开始工作。
我写了一个示例代码,在给定的日期范围内带来Outlook电子邮件帐户的一个文件夹的电子邮件。我正在使用Java邮件API 1.5和Java7。 为了获取消息,我在下面写了自1970年1月1日至2013年10月30日之前搜索电子邮件的代码- 此代码返回的消息长度为零,即自1970年1月1日至2013年10月30日之前未找到任何消息,但我的文件夹包含204封介于此范围的电子邮件。 令人惊讶的是,相同的
搜索的范围设置为子树。我以为子树作用域会导致LDAP在整个树中递归搜索,但事实似乎并非如此。但是,如果我像下面这样将完整的路径添加到搜索中,就会找到该条目。 有人能告诉我哪里出了问题吗?谢了。
我想按姓名、姓氏或电子邮件搜索用户,但由于我没有上述级别的用户密钥,我不知道如何实现这一点。我正在执行和管理员会话,因此它无法访问用户密钥。 我尝试过: 但它会把所有用户都带到数据库上。有什么想法吗?
我们使用谷歌应用程序进行工作,我们希望能够跟踪用户的gmail活动,比如他们收到多少封电子邮件,回复多少封电子邮件 我曾经使用Google Admin Reports API:Users Usage Report来获取统计数据,但结果不准确,并且它不会返回详细的消息列表。 谷歌管理控制台上的电子邮件日志搜索正是我想要的,但我不确定是否有电子邮件日志搜索API可用,以便我们可以循环搜索所有用户并检索
问题内容: 我在J2SE下使用log4j。我已将其配置为对某种类型的日志事件使用邮件程序。当logger.error触发时,出现以下异常: 有人遇到过吗?我也包括所需的mail.jar库。 任何帮助表示赞赏。谢谢克里斯 问题答案: 我查看了的源代码,该错误基本上表示了它的意思。未设置名为“ java.home”的系统属性。根据for的javadoc ,该属性由JVM自动设置为java安装目录。 我
问题内容: 我正在编写新闻稿脚本,并且需要在地址中实施搜索。我用FULLTEXT为该表编制了索引,但是当我执行以下查询时: 我得到奇怪的结果。它显示“ example.com”上的所有电子邮件以及用户名为“ name”的所有电子邮件。例如我得到: 我重新编写了查询,以使用LIKE“ %name@example.com%”,但是对于一个大表,它需要花费大量的时间才能完成。有解决方案吗?我想在搜索时仅