2013-01-03 1 views
8

Ich möchte die vom Benutzer eingegebenen ldap-Einstellungen überprüfen. Auf der Einstellungsseite gibt der Benutzer ldap url, manager dn und password ein. Ich habe auf dieser Seite eine Schaltfläche "Testeinstellungen", damit der Benutzer die LDAP-Verbindung schnell überprüfen kann. Wie geht das einfach und schnell?Testen der ldap-Verbindung

Unsere Anwendung mit Feder Sicherheit und in dem Prozess des Hinzufügens von LDAP-Authentifizierung zu ihm. Ich bin ein bisschen neu zu Java und LDAP, so dass mich auf richtige Richtung zu zeigen wird sehr geschätzt.

Danke.

Antwort

9

Aufgrund der gegebenen Informationen ist es schwer zu sagen, was Sie wissen und was Sie noch nicht wissen. Also, ich schlage vor, Sie folgen diesem hilfreichen Tutorial bei java.net LdapTemplate: LDAP Programming in Java Made Simple und überspringen Sie die Kapitel, die für Sie nicht relevant sind (es ist von 2006, aber immer noch ok). Spring LDAP in dem Artikel verwiesen wird, ist jetzt Version 1.3.1.

Wenn Sie jetzt ohne Frühling LDAP gehen für Sie den folgenden traditionellen Code verwenden können:

Map<String, String> env = new HashMap<String, String>(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://localhost:389/dc=jayway,dc=se"); 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
env.put(Context.SECURITY_PRINCIPAL, "uid="+ username +",ou=system"); // replace with user DN 
env.put(Context.SECURITY_CREDENTIALS, password); 

DirContext ctx; 
try { 
    ctx = new InitialDirContext(env); 
} catch (NamingException e) { 
    // handle 
} 
try { 
    SearchControls controls = new SearchControls(); 
    controls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    ctx.search("", "(objectclass=person)", controls); 
    // no need to process the results 
} catch (NameNotFoundException e) { 
    // The base context was not found. 
    // Just clean up and exit. 
} catch (NamingException e) { 
    // exception handling 
} finally { 
    // close ctx or do Java 7 try-with-resources http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 
} 
+0

Thanks a lot Marcel. Ich werde dein Beispiel versuchen. – user1366786

+0

Ihr Beispiel hat gut funktioniert. Und ich habe es auch mit der DefaultSpringSecurityContextSource von Spring versucht. – user1366786

+0

Der Artikel, auf den oben auf der jetzt nicht mehr existierenden java.net-Site (LdapTemplate: LDAP-Programmierung in Java Made Simple) verwiesen wurde, wurde auf folgende URL verschoben: https://community.oracle.com/docs/DOC-983546 –

1

Testen Sie die LDAP-Verbindung mit Spring LDAP-Authentifizierung:

dh mit dem authenticate() methode:

ldapTemplate.authenticate(query, password); 

oder noch besser, mit getContext() Methode:

ldapTemplate.getContextSource().getContext(userDn, userPassword)); 

Fang die org.springframework.ldap.CommunicationException zu überprüfen, ob die Verbindung erfolgreich ist.

Der vollständige Code-Schnipsel soll wie folgt aussehen:

// Create the spring LdapTemplates; i.e. connections to the source and target ldaps: 
try { 
    // Note: I'm using the direct LdapTemplate initialization rather than with bean creation (Spring ldap supports both) 
    log.info("Connecting to LDAP " + sourceHost + ":" + sourcePort + "...");  
    LdapContextSource sourceLdapCtx = new LdapContextSource(); 
    sourceLdapCtx.setUrl("ldap://" + sourceHost + ":" + sourcePort + "/"); 
    sourceLdapCtx.setUserDn(sourceBindAccount); 
    sourceLdapCtx.setPassword(sourcePassword); 
    sourceLdapCtx.setDirObjectFactory(DefaultDirObjectFactory.class); 
    sourceLdapCtx.afterPropertiesSet(); 
    sourceLdapTemplate = new LdapTemplate(sourceLdapCtx); 
    // Authenticate: 
    sourceLdapTemplate.getContextSource().getContext(sourceBindAccount, sourcePassword); 
} catch (Exception e) { 
    throw new Exception("Failed to connect to LDAP - " + e.getMessage(), e); 
} 

Hinweis: Ich bin mit Feder LDAP 2.3.x Version:

<dependency> 
    <groupId>org.springframework.ldap</groupId> 
    <artifactId>spring-ldap-core</artifactId> 
</dependency>