tutorial obtener example conexion atributos java ldap gxt

example - obtener atributos ldap java



Conexión del servidor LDAP desde la aplicación java (3)

Para conectarse a LDAP, consulte los siguientes paquetes / clases:

javax.naming.directory.* javax.naming.ladp.* com.sun.jndi.ldap.LdapCtxFactory com.sun.jndi.ldap.ControlFactory

Código de ejemplo:

//build a hashtable containing all the necessary configuration parameters Hashtable<String, String> environment = new Hashtable<String, String>(); environment.put(LdapContext.CONTROL_FACTORIES, conf.getProperty("ldap.factories.control")); environment.put(Context.INITIAL_CONTEXT_FACTORY, conf.getProperty("ldap.factories.initctx")); environment.put(Context.PROVIDER_URL, conf.getProperty("ldap.host")); environment.put(Context.SECURITY_AUTHENTICATION, "simple"); environment.put(Context.SECURITY_PRINCIPAL, conf.getProperty("ldap.user")); environment.put(Context.SECURITY_CREDENTIALS, conf.getProperty("ldap.password")); environment.put(Context.STATE_FACTORIES, "PersonStateFactory"); environment.put(Context.OBJECT_FACTORIES, "PersonObjectFactory"); // connect to LDAP DirContext ctx = new InitialDirContext(environment); // Specify the search filter String FILTER = "(&(objectClass=Person) ((sAMAccountName=" + user.getUsername() + ")))"; // limit returned attributes to those we care about String[] attrIDs = { "sn", "givenName" }; SearchControls ctls = new SearchControls(); ctls.setReturningAttributes(attrIDs); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Search for objects using filter and controls NamingEnumeration answer = ctx.search(searchBase, FILTER, ctls); ... SearchResult sr = (SearchResult) answer.next(); Attributes attrs = sr.getAttributes(); surName = attrs.get("sn").toString(); givenName = attrs.get("givenName").toString(); ...

En este ejemplo, tengo un objeto de configuración que lee estos valores de un archivo de configuración.

Los valores serían:

# LDAP parameters ldap.host = ldap://ldap.mydomain.com:389 ldap.factories.initctx = com.sun.jndi.ldap.LdapCtxFactory ldap.factories.control = com.sun.jndi.ldap.ControlFactory ldap.searchbase = dc=mydomain,dc=us ldap.user = MYDOMAIN.COM//ldap-user ldap.userBase= MYDOMAIN.COM// ldap.password = ******

Estoy construyendo una aplicación basada en GXT (J2EE). Ahora el problema es que tengo que conectar la aplicación a un servidor LDAP. ¿Puede decirme cómo conectar un servidor LDAP desde nuestra aplicación java y qué biblioteca o API tendré que usar para eso?


Incluso puede usar Netscape LDAP SDK que actualmente no está activo pero le da más control en la Programación LDAP


  • La conexión a un servidor LDAP se realiza utilizando las API JNDI (Java Naming and Directory Interface) en Java.
  • Las interfaces, clases y excepciones de JNDI están disponibles en los siguientes paquetes que vienen con JDK:

    • javax.naming. *
    • javax.naming.directory. *
  • Eso significa que no tenemos que usar ninguna biblioteca externa para trabajar con servidores LDAP, en la mayoría de los casos.

  • Eso especifica que la URL de un servidor LDAP consiste en un nombre de host en el que el servidor LDAP ejecuta el número de puerto. Un número de puerto conocido del Protocolo ligero de acceso a directorios es 389, que es el predeterminado.

  • También es necesario especificar algunas propiedades de entorno para la conexión y autenticación en un objeto Hashtable.

Aquí está el código de ejemplo:

import javax.naming.*; import javax.naming.ldap.*; import javax.naming.directory.*; public class Ldap { public static void main(String[]args) { Hashtable<String, String> environment = new Hashtable<String, String>(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); environment.put(Context.PROVIDER_URL, "ldap://<hostname>:389"); environment.put(Context.SECURITY_AUTHENTICATION, "simple"); environment.put(Context.SECURITY_PRINCIPAL, "<Login DN>"); environment.put(Context.SECURITY_CREDENTIALS, "<password>"); try { DirContext context = new InitialDirContext(environment); System.out.println("Connected.."); System.out.println(context.getEnvironment()); context.close(); } catch (AuthenticationNotSupportedException exception) { System.out.println("The authentication is not supported by the server"); } catch (AuthenticationException exception) { System.out.println("Incorrect password or username"); } catch (NamingException exception) { System.out.println("Error when trying to create the context"); } } }