2017-09-13 1 views

Antwort

0

Sie haben die erweiterten Suchoperation auf Active Directory verwenden, die Sie benachrichtigt registrieren erlaubt werden, wenn eine Änderung auftritt.

Dies ist die OID von Microsoft AD dafür so vorgesehen ist:

https://msdn.microsoft.com/en-us/library/aa366983(v=vs.85).aspx

In Bezug auf UnboundID LDAP SDK, scheint es diese Kontrolle tun sollten, was Sie brauchen diese Kontrolle zu sein (aber nicht ein Java-Experte):

https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/experimental/ActiveDirectoryDirSyncControl.html

+1

Das DirSync-Steuerelement ist ein LDAP-Steuerelement (OID 1.2.840.113556.1.4.841). Es ist also nicht dasselbe wie das in der ersten Verbindung referenzierte; Aber möglicherweise eine gute Wahl für das gewünschte Ergebnis. AFIK, das UnboundID LDAP SDK unterstützt die LDAP_SERVER_NOTIFICATION_OID (1.2.840.113556.1.4.528) NICHT direkt, sollte aber relativ einfach zu implementieren sein. – jwilleke

+0

@jwilleke Danke für das Aufzeigen. Ich bin kein Java-Experte und habe gerade die UnboundID-Dokumentation aus Neugierde überprüft, ohne weiter zu suchen. Ich werde meine Antwort bearbeiten, um Ihren Standpunkt einzubeziehen. – Esteban

+0

Danke für die Antwort. Brauchen Sie keine aktive direcory Melodie? Methoden des Listeners werden nicht aufgerufen (in Bezug auf UnboundID LDAP SDK), wenn ich ein Attribut des Eintrags ändere. Ich habe versucht mit benutzerdefinierten Steuerelement (Code das gleiche wie PersistentSearchRequestControl), aber mit anderen OID (1.2.840.113556.1.4.528). Leider ist es nicht möglich dirSync zu installieren. – nikelyn

0

auf der Grundlage der vorgeschlagenen Kommentare, LDAP_SERVER_NOTIFICATION_OID Steuer Umsetzung auf AD arbeiten sollten . Siehe dieses sehr grundlegende Testbeispiel:

// 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); 
    } 

} 

Der Test macht nicht viel. Wartet 15 Sekunden, während alle Änderungen innerhalb der BaseDN ausgedruckt werden sollten.

Verwandte Themen