java ldap - 获取信息是对 AD 的更改

Posted

技术标签:

【中文标题】java ldap - 获取信息是对 AD 的更改【英文标题】:java ldap - get info is something changes in to AD 【发布时间】:2019-01-09 22:36:15 【问题描述】:

我正在使用 java spring 制作一个项目,在该项目中我对来自用户或广告组的某些属性的内容进行特定搜索。我还为特定属性编写了一些文本输入。

现在我想走得更远一点..

我的想法是对特定的 AD 用户组进行公开搜索。当该组中用户的属性或其他内容发生更改时,AD 必须向我的 java 程序发送消息或告诉我“注意用户 x 已更改”。

如果我知道这一点,我可以重新搜索以查看该用户的属性是否已更改。

我知道每次搜索此 AD 组中用户的时间戳时我都可以解决这个问题。但这不是完美的解决方案。因为那时我必须每次搜索每个时间戳。例如,如果该组中有 5000 个用户。我从用户 1 开始,用户 4000 已经改变,是的.. 然后需要一分钟左右,直到我知道用户 4000 已经改变。

所以我想要一个实时搜索的东西。

你能帮我解决这个问题吗?你能给我一个方向,我可以在网上进一步搜索以找到解决方案或其他东西。或者这是不可能的?

非常感谢

【问题讨论】:

【参考方案1】:

Active Directory 没有推送通知功能,因此无法执行此操作。您需要定期搜索以找到所需的帐户。

但是,您可以更改条件以仅查找您想要的帐户。 whenChanged 属性具有帐户上次更改的日期。您可以查询该组的成员,这些成员最近发生了变化。

例如:

(&(objectClass=User)(whenChanged>=20190108000000.0Z)(memberOf=CN=mygroup,OU=Groups,DC=domain,DC=com))

whenChanged 使用的日期格式的描述是here。

memberOf 条件应与组的distinguishedName 匹配。如果组内还有其他组,并且您也想查找这些组的成员,那么您可以进行递归搜索:

(&(objectClass=User)(whenChanged>=20190108000000.0Z)(memberOf:1.2.840.113556.1.4.1941:=CN=mygroup,OU=Groups,DC=domain,DC=com))

那个疯狂的号码叫做LDAP_MATCHING_RULE_IN_CHAIN,描述为here。

【讨论】:

谢谢!你也可以给我一个例子来在java spring代码中实现这个吗?因为我使用 ldapquerybuilder .. 我不是 Java 开发人员,但看看 docs,这样的东西可能会起作用:LdapQueryBuilder.query().where("objectClass").is("user").and("whenChanged").gte(date).and("memberOf").is(groupDn) @GabrielLuci 嘿,你已经用你的 cmets 解决了我的大部分问题。

以上是关于java ldap - 获取信息是对 AD 的更改的主要内容,如果未能解决你的问题,请参考以下文章

LDAP方式连接AD获取用户信息

Spring 5,从 LDAP (AD) 获取信息

AD 域服务简介- Java 获取 AD 域用户

AD用户属性对照表

如何通过Java中的LDAP获取AD组的所有成员

使用 LDAP 和 PHP 获取 AD 错误数(ldap 函数返回不精确的错误)