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 的更改的主要内容,如果未能解决你的问题,请参考以下文章