Active directory 活动目录。持续搜索或条目更改通知

Active directory 活动目录。持续搜索或条目更改通知,active-directory,ldap,unboundid-ldap-sdk,Active Directory,Ldap,Unboundid Ldap Sdk,我希望使用未绑定的LDAP SDK从active directory(AD)获取用户实体的更改 默认情况下,AD是否支持持续搜索或条目更改通知,或者我必须进行任何设置 提前感谢您必须在Active Directory上使用扩展搜索操作,该操作允许您注册以在发生更改时收到通知 这是Microsoft AD为此提供的OID: 就未绑定LDAP SDK而言,该控件似乎应该做您需要做的事情(但不是Java专家): 根据建议的注释,LDAP\u服务器\u通知\u OID控制实现应该可以在AD上工作。请参

我希望使用未绑定的LDAP SDK从active directory(AD)获取用户实体的更改

默认情况下,AD是否支持持续搜索条目更改通知,或者我必须进行任何设置


提前感谢

您必须在Active Directory上使用扩展搜索操作,该操作允许您注册以在发生更改时收到通知

这是Microsoft AD为此提供的OID:

就未绑定LDAP SDK而言,该控件似乎应该做您需要做的事情(但不是Java专家):


根据建议的注释,LDAP\u服务器\u通知\u OID控制实现应该可以在AD上工作。请参阅以下非常基本的测试示例:

// LDAP_SERVER_NOTIFICATION_OID (1.2.840.113556.1.4.528)
@Test
public void test_LDAP_SERVER_NOTIFICATION_OID() throws LDAPException, InterruptedException
{
    AsyncSearchResultListener myAsyncSearchResultListener = new MyLdapChangeAsyncListener();

    SearchRequest searchRequest = new SearchRequest(
            myAsyncSearchResultListener,
            "DC=test,DC=lab,DC=com",  // baseDN
            SearchScope.SUB,
            Filter.createPresenceFilter("objectClass"), null);

    Control myControl = new Control("1.2.840.113556.1.4.528");
    searchRequest.addControl(myControl);

    AsyncRequestID asyncSearchId = connection.asyncSearch(searchRequest);

    // Wait 15 seconds for changes to be returned
    Thread.sleep(15000);

    connection.abandon(asyncSearchId);
    connection.close();

}


private class MyLdapChangeAsyncListener implements AsyncSearchResultListener
{
    @Override
    public void searchEntryReturned(SearchResultEntry searchEntry)
    {
        System.out.println(" >>> ldap searchEntryReturned: " + searchEntry);
    }

    @Override
    public void searchReferenceReturned(SearchResultReference searchReference)
    {
        System.out.println(" >>> ldap searchReferenceReturned: " + searchReference);
    }

    @Override
    public void searchResultReceived(AsyncRequestID requestID, SearchResult searchResult)
    {
        System.out.println(" >>> ldap searchResultReceived: " + requestID + " / " + searchResult);
    }

}

这项测试没有多大作用。等待15秒,同时应打印baseDN内的任何更改。

DirSync控件是LDAP控件(OID 1.2.840.113556.1.4.841),因此它与第一个链接中引用的控件不同;但对于期望的结果来说,这可能是一个不错的选择。AFIK,未绑定的LDAP SDK不直接支持LDAP_服务器_通知_OID(1.2.840.113556.1.4.528),但它应该非常直接地实现。@jwilleke感谢您指出这一点。我不是Java专家,所以只是好奇地查看了未绑定的文档,没有进一步搜索。我将编辑我的答案以包含您的观点。谢谢您的回答。不需要主动的定向调吗?当我更改条目的任何属性时,侦听器的方法不会被调用(对于未绑定的LDAP SDK而言)。我尝试使用自定义控件(代码与PersistentSearchRequestControl相同),但使用了其他oid(1.2.840.113556.1.4.528)。不幸的是,无法安装dirSync。