Aunque Java JNDI proporciona API para operaciones LDAP, pero el uso de JNDI normalmente requiere mucho trabajo de programación de bajo nivel. Spring LDAP framework es una buena forma de hacer LDAP en Java. En esta guía paso a paso, verá cómo conectarse al servidor LDAP y luego buscar el nombre de un usuario usando la identificación del usuario.
Antes de que empieces, aquí es un navegador LDAP de código abierto. Al configurar la información de inicio de sesión correcta, debería poder navegar por el directorio ldap. De esta manera, tiene la idea de lo que puede obtener del servidor Ldap.
1. Necesitamos tanto los binarios de Spring Framework como los binarios de Spring LDAP para ejecutar el siguiente ejemplo. Spring LDAP requiere J2SE 1.4 y es compatible con las versiones 1.2.8 y 2.0 de Spring Framework. El código de muestra de este artículo se basa en la versión 1.1.2 de Spring LDAP y se ha probado con Spring Framework 2.0.1.
- Descargue los binarios de Spring LDAP desde el Página de inicio de Spring LDAP.
- Descargue Spring Framework 2.0.1 desde Página de inicio de Spring Framework.
2. Cree las siguientes clases. Todas las clases se pueden colocar en un directorio de paquetes, usted lo agrega al paquete a su manera.
1. La interfaz ContactDAO
Defina dos funciones. Uno es para obtener todos los nombres de contacto, otro es para obtener detalles de contacto.
import java.util.List; public interface ContactDAO { public List getAllContactNames(); public List getContactDetails(String commonName); } |
2. LDAPContactDAO
Implementar la interfaz definida.
import java.util.List; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import org.springframework.ldap.AttributesMapper; import org.springframework.ldap.LdapTemplate; import org.springframework.ldap.support.DistinguishedName; import org.springframework.ldap.support.filter.AndFilter; import org.springframework.ldap.support.filter.EqualsFilter; public class LDAPContactDAO implements ContactDAO{ private LdapTemplate ldapTemplate; public void setLdapTemplate(LdapTemplate ldapTemplate) { this.ldapTemplate = ldapTemplate; } public List getAllContactNames() { return ldapTemplate.search("", "(objectClass=person)", new AttributesMapper() { public Object mapFromAttributes(Attributes attrs) throws NamingException { return attrs.get("mail").get(); } }); } public List getContactDetails(String objectclass){ AndFilter andFilter = new AndFilter(); andFilter.and(new EqualsFilter("objectClass",objectclass)); System.out.println("LDAP Query " + andFilter.encode()); return ldapTemplate.search("", andFilter.encode(),new ContactAttributeMapper()); } } |
3. springldap.xml
Aquí tenga cuidado con el nombre base, puede usar un cliente para conectar el servidor LDAP primero y ver qué hay dentro. Yo uso OU = ***, porque todos nuestros usuarios están almacenados en este directorio.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="contextSource" class="org.springframework.ldap.support.LdapContextSource"> <property name="url" value="ldap://your.ldap.url:389" /> <property name="base" value="base, be careful to put it right" /> <property name="userName" value="your username" /> <property name="password" value="password" /> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate"> <constructor-arg ref="contextSource" /> </bean> <bean id="ldapContact" class="com.javaworld.sample.LDAPContactDAO"> <property name="ldapTemplate" ref="ldapTemplate" /> </bean> </beans> |
4. ContactAttributeMapper
import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import org.springframework.ldap.AttributesMapper; public class ContactAttributeMapper implements AttributesMapper{ public Object mapFromAttributes(Attributes attributes) throws NamingException { ContactDTO contactDTO = new ContactDTO(); Attribute mail = attributes.get("mail"); Attribute sap = attributes.get("employeeNumber"); if(mail != null) contactDTO.setMail((String)mail.get()); if(sap != null) contactDTO.setSap((String)sap.get()); return contactDTO; } } |
5. Póngase en contacto con DTO
public class ContactDTO { String mail; String sap; public String getSap() { return sap; } public void setSap(String sap) { this.sap = sap; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public String toString() { StringBuffer contactDTOStr = new StringBuffer("Person=["); contactDTOStr.append(" mail = " + mail); contactDTOStr.append(" ]"); return contactDTOStr.toString(); } } |
6. La clase de prueba: SpringFrameworkLDAPClient
import java.util.List; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.dao.DataAccessException; public class SpringFrameworkLDAPClient { public static void main(String[] args) { //Resource resource = new ClassPathResource("/SpringLDAPClient/src/com/javaworld/sample/springldap.xml"); //System.out.println(resource.toString()); try { Resource resource = new ClassPathResource("springldap.xml"); BeanFactory factory = new XmlBeanFactory(resource); System.out.println(factory.toString() + "n"); ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact"); List contactList = ldapContact.getContactDetails("30662"); //List contactList =ldapContact.getAllContactNames(); //System.out.println(contactList.size()); int count = 0; for( int i = 0 ; i < contactList.size(); i++){ System.out.print("Email: " + ((ContactDTO) contactList.get(i)).getMail() + " "); System.out.println("SAP: " + ((ContactDTO) contactList.get(i)).getSap()); count++; } System.out.println("n" + count); } catch (DataAccessException e) { System.out.println("Error occured " + e.getCause()); } } } |
Este tutorial es de Javaword, pero dediqué algo de tiempo a que realmente funcionara.