java - java ldap - 获取信息是对 AD 的更改
问题描述
我正在使用 java spring 制作一个项目,在该项目中我对来自用户或广告组的某些属性的内容进行特定搜索。我还为特定属性编写了一些文本输入。
现在我想走一点但更远..
这个想法是我对特定的 AD 用户组进行公开搜索。当该组中的某个属性或来自用户的其他内容发生更改时,AD 必须向我的 java 程序发送消息或告诉我“注意用户 x 已更改”。
如果我知道,我可以进行新的搜索以查看该用户的属性是否已更改。
我知道每次搜索此 AD 组中用户的时间戳时,我都可以解决这个问题。但这不是完美的解决方案。因为那时我必须每次搜索每个时间戳。例如,如果该组中有 5000 个用户。我从用户 1 开始,用户 4000 已更改是的.. 然后将需要一分钟或其他时间,直到我知道用户 4000 已更改。
所以我想要一个实时搜索的东西。
你能帮我解决这个问题吗?你能给我一个方向,我可以在网上进一步搜索以找到解决方案或其他东西。或者这是不可能的?
非常感谢
解决方案
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
和描述。