首页 > 解决方案 > java ldap - 获取信息是对 AD 的更改

问题描述

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

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

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

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

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

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

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

非常感谢

标签: javaspringactive-directoryldap

解决方案


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

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

例如:

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

此处对使用的日期格式进行了whenChanged说明。

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和描述。


推荐阅读