2013-01-03 17 views
8

Chcę zweryfikować wprowadzone przez użytkownika ustawienia ldap. Na stronie ustawień użytkownik wprowadza adres URL ldap, manager dn i hasło. Mam przycisk "Ustawienia testowe" na tej stronie, aby użytkownik mógł szybko sprawdzić połączenie ldap. Jak to zrobić łatwo i szybko?Testowanie połączenia ldap

Nasza aplikacja używająca zabezpieczeń sprężynowych i procesu dodawania do niej uwierzytelniania LDAP. Jestem trochę nowy w java i ldap, więc wskazanie mnie we właściwym kierunku jest bardzo doceniane.

Dzięki.

Odpowiedz

9

Na podstawie podanych informacji trudno jest powiedzieć, co wiesz i czego jeszcze nie wiesz. Sugeruję więc skorzystanie z tego pomocnego samouczka pod adresem java.net LdapTemplate: LDAP Programming in Java Made Simple i pominięcie nieistotnych dla ciebie rozdziałów (jest to od 2006 roku, ale wciąż jest OK). Spring LDAP, o którym mowa w artykule, jest już w wersji 1.3.1.

Jeśli chcesz iść bez wiosennego LDAP teraz można użyć następujących tradycyjnych kod:

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

dziękuję Marcel. Spróbuję twojego przykładu. – user1366786

+0

Twój przykład zadziałał dobrze. A także, próbowałem to samo z wiosną DefaultSpringSecurityContextSource. – user1366786

+0

Artykuł wymieniony powyżej na nieistniejącej już witrynie java.net (LdapTemplate: Programowanie LDAP w języku Java Made Simple) został przeniesiony do tego adresu URL: https://community.oracle.com/docs/DOC-983546 –

1

przetestować połączenie LDAP przy użyciu uwierzytelniania Wiosna LDAP:

czyli z authenticate() metoda:

ldapTemplate.authenticate(query, password); 

lub nawet lepiej, z getContext() metoda:

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

Catch the org.springframework.ldap.CommunicationException, by sprawdzić, czy połączenie się powiedzie.

Pełne fragment kodu powinien wyglądać następująco:

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

Uwaga: Używam sprężyny wersji 2.3.x LDAP:

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