Acceso a LDAP mediante Netscape Directory SDK
API JNDI
Mediante el API de JNDI es posible escribir cualquier tipo de programa para acceder a información en directorios LDAP, gestores de Base de datos relacionales, servicios CORBA (COS, Corba Object Service), NDS de Novell, entre otras aplicaciones. Para que un programa de Java busque información de cualquier tipo en un directorio LDAP debe indicarse dentro del programa la ubicación del directorio LDAP mediante un Naming Manager para la ubicación física del sistema. Esto es importante ya que en cualquier momento es posible cambiar el servidor físico del directorio LDAP y no será necesario la modificación de programa fuente para luego compilarlo, sino basta con cambiar los parámetros de configuración.
API JNDI
Configuración de Recursos JNDI
Para realizar una consulta a una entrada de directorio LDAP mediante la librería Netscape Directory SDK para Java, será necesario la configuración de JNDI en un servidor web, para este artículo lo voy a desarrollar en una aplicación web con Apache Tomcat. El cual trae una implementación JNDI InitialContext para cada instancia de aplicación web que se encuentre ejecutando bajo este servidor. Para esto será necesario que descarguen el instalador de Apache Tomcat y configuralo. El servidor Tomcat es una aplicación web basada en Java creada para ejecutar servlets y páginas JSP que nos ayudará para este propósito.
Para este caso se creará una aplicación web con una estructura de directorios básico, lo nombraremos ldap que se encontrará en el directorio $CATALINA_HOME/webapps Luego es necesario incluir un descriptor de la aplicación que es el archivo web.xml que contendrá la configuración de la aplicación web y estará dentro del directorio WEB-INF/ del directorio raíz de la aplicación creada, es decir $CATALINA_HOME/webapps/ldap/WEB-INF/web.xml
Las entradas InitialContext en una aplicación web son configurados en un elemento <Context> que puede estar definido en $CATALINA_HOME/conf/server.xml ó de preferencia el archivo XML del contexto de la aplicación dentro de META-INF/context.xml
Los recursos definidos en estos elementos pueden estar referidos por los siguientes elementos al utilizar la descripción de una aplicación web que se encuentra en /WEB-INF/web.xml:
- <env-entry> - Es la entrada del entorno de aplicación, un parámetro de valor simple, puede ser usado para configurar de cómo la aplicación funcionará.
- <resource-ref> - Es la referencia del recurso de la aplicación, que es un objeto Factory para recursos como JDBC DataSource, JavaMail Session ó un objeto Factory personalizado.
- <resource-env-ref> - Es el Recurso de referencia del entorno de aplicación, es una nueva variación del elemento <resource-ref> añadido en Servlet 2.4 que es más simple de configurar para recursos que no necesitan información de autenticación.
Para el caso de nuestra aplicación definiremos el elemento <resource-env-ref> en el descriptor de la aplicación web.xml con el siguiente contenido.
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <resource-env-ref> <description> Objeto Factory para una instancia de BeanLDAPHost. </description> <resource-env-ref-name> beanldaphost </resource-env-ref-name> <resource-env-ref-type> com.nspsac.bean.BeanLDAPHost </resource-env-ref-type> </resource-env-ref> </web-app>
Como habrán notado en este descriptor de la aplicación hacemos referencia a un recurso de la aplicación con el nombre beanldaphost
que es de tipo de clase JavaBean com.nspsac.bean.BeanLDAPHost
, que luego se implementará.
Cada recurso JNDI disponible es configurado en base a una inclusión de los siguientes elementos dentro de un elemento <Context>
ó un elemento <DefaultContext>
:
- <Environment> - Configura nombres y valores de entradas de entorno de aplicación que estará en funcionamiento a través de JNDI InitialContext.
- <Resource> - Configura el nombre y el tipo de dato de un recurso disponible para la aplicación.
- <ResourceLink> - Agrega un enlace a un recurso definido en el contexto JNDI global.
Para configurar el recurso JNDI en nuestra aplicación agregamos el <Context>
en el archivo de configuración $CATALINA_HOME/conf/server.xml
que es el recurso que hacemos referencia con el nombre beanldaphost
.
<Context path="ldap" docBase="ldap" reloadable="true" override="true"> <Resource name="beanldaphost" auth="Container" type="com.nspsac.bean.BeanLDAPHost" factory="com.nspsac.bean.BeanLDAPHostFactory" iphost="localhost" puerto="389" dnbase="dc=nspsac,dc=com" dnmgr="cn=root" dnpwd="abc" dnraiz="ou=People" ctxfactory="com.netscape.jndi.ldap.LdapContextFactory"/> <Context>
En este recurso JNDI estará almacenado la información necesaria para acceder a un directorio LDAP desde una aplicación web; como habrán notado, este recurso utiliza una clase JavaBean y el Resource Factory que es una clase también JavaBean asociado mediante el atributo factory
con el valor com.nspsac.bean.BeanLDAPHostFactory
, y los demás atributos (iphost, puerto, dnbase, dnmgr, dnpwd y dnraiz
) de este elemento <Resource>
son información que utilizaremos dentro de las clases JavaBean para realizar la conexión hacia el directorio LDAP definido anteriormente. Adicionalmente, podemos apreciar el atributo ctxfactory
asociado a un proveedor de servicios de interfaz (SPI) tal como habíamos indicado anteriormente.
En esta configuración el atributo factory
hace referencia a un Resource Factory, pero según la configuración de tomcat podemos incluir de la siguiente forma "org.apache.naming.factory.BeanFactory
", y por razones de personalizar nuestra aplicación, se ha creado una clase JavaBean propio.
Otros Artículos en esta sección
-
Clase en java que calcula los puntos del contorno de un objeto dentro de una imagen binaria.En este artículo se plantea una introducción, totalmente funcional, a la generación de documentos XML para su posterior creación de fichero XML utilizando DOM (Document Object Model) de Java XERCES Parser v2.7.1Instalación paso a paso de Java Standar Edition Development Kit 7 en Ubuntu, Fedora, CentOS, Mint¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deProgramación »