Подключение к Ldap

#java #ldap

#java #ldap

Вопрос:

Мне нужно написать фрагмент кода на Java, который установит соединение с LDAP и извлекет оттуда несколько значений.

Мне нужно знать, какие детали мне нужны для установления соединения с LDAP.

Комментарии:

1. Вот несколько примеров кода, которые помогут вам начать: developer.novell.com/documentation/samplecode/jldap_sample /…

Ответ №1:

Java использует JNDI как средство для взаимодействия с сервером каталогов LDAP. Oracle предоставляет отличный учебник по JNDI. Здесь будет подробно описан JNDI API и объяснено, как он связан с операциями LDAP. Он изобилует примерами кода о том, как подключаться, аутентифицировать и запрашивать каталог.

Ответ №2:

Здесь вы получили несколько фрагментов кода, чтобы показать, как выглядит реализация операции смены пароля, вы могли бы использовать его в качестве отправной точки, чтобы узнать больше о LDAP-подключении из Java. Проверьте метод getCtx()…

 package so;

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;

public class DemoLdap4SO {

    private void changePassword(String principal, String oldPassword, String newPassword) 
        throws NamingException  {
        InitialDirContext ctx = getCtx(principal, oldPassword);
        if (ctx == null || newPassword == null || newPassword.equals("")) {
            throw new NamingException();
        }
        BasicAttribute attr = new BasicAttribute("userpassword", newPassword);
        ModificationItem mi = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
        ModificationItem[] items = new ModificationItem[1];
        items[0] = mi;
        ctx.modifyAttributes(getUserDN(principal), items);
    }

    private String getUserDN(String user) {
        String m_usersDn = "cn=Users,your realm";
        String usrDn = "cn="   user   ","   m_usersDn;
        return usrDn;
    }

    private InitialDirContext getCtx(String user, String pswd) throws NamingException {
        String ldapUrl = "put your ldap url here";
        String ldapRealm = "put your realm here";
        Hashtable ht = new Hashtable();
        ht.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
        ht.put(Context.PROVIDER_URL, ldapUrl);
        ht.put(Context.SECURITY_AUTHENTICATION, "simple");
        ht.put(Context.SECURITY_PRINCIPAL, getUserDN(user));
        ht.put(Context.SECURITY_CREDENTIALS, pswd);
        try {
            return new InitialDirContext(ht);
        } catch (NamingException exc) {
            // log error
        }
        return null;
    }

}
  

Ответ №3:

Вот код для подключения LDAP..

 public Connection()
{
try
{

    System.setProperty("javax.net.ssl.trustStore", TRUST_STORE);

    ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

    ldapEnv.put(Context.PROVIDER_URL, "ldap://localhost:389");
    ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    ldapEnv.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL   BASE_NAME);
    ldapEnv.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);

    ldapContext = new InitialDirContext(ldapEnv);

catch (Exception e)
{
    System.out.println(" bind error: "   e);
    e.printStackTrace();
    System.exit(-1);
}
}
  

Ответ №4:

Используйте jldap

Вот пример кода:

 int ldapVersion     = LDAPConnection.LDAP_V3;

    try
    {
        if(conn == null)
            conn = new LDAPConnection();

        // connect to the server
        if(conn.isConnected() == false)
            conn.connect(hostName, port);

         // bind to the server
        if(authType.equals("Anonymous"))
        {
            conn.bind("Anonymous" ,null);
        }
        else
        {
           conn.bind(ldapVersion, login, password.getBytes("UTF8"));
        }

        Logs.write("LDAP CONNECTION Established ");
        return true;

    }
    catch (LDAPException ex) {

        Logs.write("CONNECTION ERROR " ex.toString());
        return false;
    }
    catch (IllegalArgumentException ex)
    {
       Logs.write("CONNECTION ERROR " ex.toString());
        return false;
    }
  

Ответ №5:

Это руководство по настройке LDAP Spring поможет вам реализовать Java-клиент для LDAP. Он содержит фрагмент кода для подключения к LDAP и выполнения операций.