Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Atributos

Como la mayoría de las operaciones sobre directorios LDAP se centran alrededor de los atributos, necesitamos entender cómo usar esos atributos a través de JNDI.

Los atributos de una entrada LDAP están representados por el interface Attributes, mientras que los atributos individuales están representados por el interface Attribute. Para crear atributos y usarlos en nuestro programa, deberíamo ssuar las clases BasicAttributes y BasicAttribute.

Aquí hay un ejemplo que crea dos atributos, "oc" y "photo", y los pone dentro de un objeto Attributes:

// Create a multivalued attribute that has four String values
BasicAttribute oc = new BasicAttribute("objectClass", "top");
oc.add("person");
oc.add("organizationalPerson");
oc.add("inetOrgPerson");

// Create an attribute by using a byte array
BasicAttribute photo = new BasicAttribute("jpegPhoto", buf);

// Create the attribute set
BasicAttributes attrs = new BasicAttributes(true);
attrs.put(oc);
attrs.put(photo);

Nombres de Atributos

Identificados un atributo a través de su nombre de atributo, que algunas veces también es llamado identificador de atributo o nombre de tipo atributo. La lección Operaciones de Directorio explica los nombres de atributos, específicamente cubre la subclasificación de atributos, los sinónimos de nombres de atributos, y la síntaxis para especificar las preferencias de lenguajes. Estas características podrían no ser soportadas por todas las implementaciones de servidores LDAP.

Los nombres de atributos LDAP no son sensibles a las mayúsculas. Así dos nombres de atributos como "objectclass" y "objectClass", serían intrepetdos como el mismo atributo. Si estamos usando la clase BasicAttributes para representar atibutos LDAP, deberíamos pasar true en el parámetro ignoreCase de su constructor- Aquí tenemos algunos ejemplo:

Attributes attrs1 = new BasicAttributes(true);
Attributes attrs2 = new BasicAttributes("objectClass", "top", true); 

Opciones

El LDAP v3 permite que se añadan opciones al nombre de un atributo. Cada opción está precedida por el caracter punto y coma (";"). Las opciones son como subclases de atributos. Es decir, un nombre de atributo nombrado sin opción es tratado como la superclase del atributo nombrado con una opción. La única opción definida por el protocolo es binary (que se indica usando el string ";binary"), que significa que el valor del atributo debería ser transmitido en formato binario (sin importar su síntaxis real). Esta opción está reservada para transmisiones de datos codificados ASN.1 (como certificados "caCertificate;binary"). Los servidores que soporta subclasificación de atributos podrían soportar identificación del atributo sin su opción binary, pero siempre es mejor incluir la opción en el nombre del atibuto.

Atributos Operacionales

El LDAP v3 soporta la noción de atributo operacional, que son atributos asociados con un objeto directorio para propósitos administrativos. La lista de control de acceso para un objeto, por ejemplo, es un atributo operacional. En DirContext.getAttributes() y DirContext.search(), podemos suministrar null como la lista de atributos a devolver y así podemos especificar que se devuelvan todos los atributos asociado con los objetos solicitados. Sin embargo, los atributos devueltos, no incluyen los atributos operacionales. Para recuperar éstos, debemos nombrarlos explícitamente.

Valores de Atributos

Un atributo LDAP puede tener un sólo valor, o múltiples valores desordenados. Si se permite que un atributo tenga más de un valor lo dicta la definición del atributo en el esquema del directorio. Los dos tipos (un sólo valor y múltiples valores) se represetan en JNDI como un Attribute. En el ejemplo anterior, se creó un atributo con multiples valores y otro con un sólo valor.

JNDI es muy flexible en cómo se pueden representar los valores de atributos según sean declarados como java.lang.Object. Cuando usamos JNDI para acceder o actualizar atributos elmacenados en un directorio particular, los tipos de los valores de atributos dependen del directorio y algunas extensiones, del proveedor de servicios correspondiente. Para el directorio LDAP, el proveedor LDAP de Sun representa los valores de atributos como java.lang.String o byte[]. Los arrays de byte se usan para representar valores de atributos que no tienen síntaxis de cadena de texto. Los Strings se usan para representr los valores de todas las demás síntaxis.

Para un atributo arbitrario, no hay disponible una forma programática para determinar si su síntaxis no del tipo cadena de texto. Si hay forma manuales, por supuesto, que implica la búsqueda del atributo y su síntaxis en documentos como RFC 2256. El proveedor de servicio LDAP tiene una lista interna de nombres de atributos que él sabe que contiene valores que no son strings y permite a los clientes añadir a la ista. La siguiente tabla nos ofrece esta lista interna:

Nombre de Atributo OID del Atributo
Todos los nombres de atributos que contiene la opción ";binary".  
photo 0.9.2342.19200300.100.1.7
personalSignature 0.9.2342.19200300.100.1.53
audio 0.9.2342.19200300.100.1.55
jpegPhoto 0.9.2342.19200300.100.1.60
javaSerializedData 1.3.6.1.4.1.42.2.27.4.1.8
thumbnailPhoto 1.3.6.1.4.1.1466.101.120.35
thumbnailLogo 1.3.6.1.4.1.1466.101.120.36
userPassword 2.5.4.35
userCertificate 2.5.4.36
cACertificate 2.5.4.37
authorityRevocationList 2.5.4.38
certificateRevocationList 2.5.4.39
crossCertificatePair 2.5.4.40
x500UniqueIdentifier 2.5.4.45

Cuando leamos uno de esto atributos desde el directorio LDAP, su valo será del tipo byte[].

Especificar Atributos no-String Adicionales

Si nuestro programa usa un atributo cuyo valor debería devolverse como un array de byte pero su nombre de atributo no está en la lista, necesitamos añadir ese nombre a la lista de atributos no-String. Hacemos esto usando la propiedad de entorno "java.naming.ldap.attributes.binary". Su valor es una cadena de nombres de atributos separador por espacios.

Por ejemplo, la siguiente configuración de la propiedad de entorno informa al proveedor LDAP que el valor de los atributos llamados "mpegVideo" y "mySpecialKey" se devuelven como arrays de byte:

env.put("java.naming.ldap.attributes.binary", "mpegVideo mySpecialKey");

Eliminar el Retorno de Valores de Atributos

El LDAP v3 nos permite especificar que sólo se devuelvan los nombres de los tipos de atributo (y no los valores de atributo). Para hacer esto usando el JNDI, configuramos la propiedad de entorno "java.naming.ldap.typesOnly" Esta propiedad afecta a DirContext.getAttributes() y DirContext.search(). Cuando especificamos qué objetos van a ser devueltos (pasando true a SearchControls.setReturningObjFlag()) y luego llamamos a search(), esta propiedad es ignorada porque los valores de atributos son necesarios para generar el objeto.

Aquí tenemos un ejemplo que obtiene una lista de los nombres de atributos de una entrada:

// Indicate that you want only the type names
env.put("java.naming.ldap.typesOnly", "true");

// Create initial context
DirContext ctx = new InitialDirContext(env);

// Get the attributes
Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People");

Este ejemplo produce la siguiente salida:

{sn=sn: No values, 
 objectclass=objectclass: No values, 
 jpegphoto=jpegphoto: No values, 
 mail=mail: No values, 
 facsimiletelephonenumber=facsimiletelephonenumber: No values, 
 telephonenumber=telephonenumber: No values, cn=cn: No values}

Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis