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