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:


Métodos de Búsqueda de Contexto

El interface DirContext proporciona los siguientes métodos de búsqueda:

Cada uno de estos métodos tiene una versión sobrecargada que acepta un nombre java.lang.String en vez de un Name como primer argumento.

Usar Correspondencia de Atributos

La primera forma, search(Name name, Attributes matchingAttrs), es equivalente a la segunda forma, search(Name name, Attributes matchingAttrs, String[] retAttrs), con null suministrado como el argumento retAttrs.

search(name, matchingAttrs, null);

El ejemplo búsqueda básica muestra cómo usar estos dos métodos.

En estos métodos, el argumento matchingAttrs es convertido en un String de filtro según la RFC 2254 que es una expresión conjuntiva de atributos de matchingAttrs. Por ejemplo, un matchingAttrs que contiene los siguientes atributos:

sn: Geisel
mail: (No value)

se traduce en el String de filtro "(&(sn=Geisel)(mail=*))".

Cada valor de atributo se trata literalmente--es decir, se espera que el atributo en la entrada del directorio contenga exactamente ese valor. Por lo tanto, si el valor del atributo contiene un asterisco ("*") u otros caracteres especiales definidos en la RFC 2254, el proveedor LDAP aplicará las reglas de codificación apropiadas. Por ejemplo, un matchingAttrs que contenga los siguientes atributos:

sn: Geisel
mail: *

se traduce en el String de filtro "(&(sn=Geisel)(mail=\2a))". En este caso, la entrada del directorio debe contener un atributo "mail" cuyo valor es el string "*".

Si el valor del atributo es un array de byte, se codifica usando la notación de atributos no-string, como se describe en la RFC 2254. Por ejemplo, un matchingAttrs que contenga los siguientes atributos:

jpegphoto: 82 12 38 4e 23 e3 (byte array)

se traduce en el String de filtro "(jpegphoto=\82\12\38\4e\23\e3)".

Usar un String de Filtro

La sección Filtros de Búsqueda tiene una rápida introducción a la síntaxis de los filtros de búsqueda y contiene ejemplos de cómo usar la tercera forma de los métodos de búsqueda. search(Name name, String filter, SearchControls ctls). El String de filtro sigue la síntaxis especificada en la RFC 2254, excepto en que también se permiten caracteres Unicode. Es preferible usar caracteres Unicode que octetos UTF-8 codificados.

Por ejemplo, en el lenguaje Java, podemos especificar la letra griega alfa como el caracter Unicode \u03b1. Para buscar una entrada cuyo valor de atributo contenga este caracter, podemos usar el string "\u03b1" o "\ce\b1" (con los escapes apropiados para las barras invertidas ("\") si estamos usando el caracter como un string literal del lenguaje Java). La forma Unicode es la preferida. El proveedor de servicio LDAP traducirá los caracteres Unicode en sus correspondientes representaciones UTF-8 para su transmisión al servidor.

Usar String de Filtro con Argumentos

La cuarta forma del método de búsqueda, search(Name name, String filterExpr, Object[] filterArgs, SearchControls ctls), nos permite construir el String de filtro usando una expresión de filtro filterExpr y un array de argumentos filterArgs.

El argumento filterExpr puede contener strings de la forma "{n}", donde el enésimo elemento de filterArgs reemplaza la ocurrencia del string "{n}" en filterExpr en el string de filtro resultante. Cada string "{n}" podría aparecer como un nombre de atributo, un valor de atributo, o un componente del valor de atributo. (O más precisamente, cada string "{n}" podría aparecer en lugar de "attr" o de "value" en la sección 4 de RFC 2254.)

Durante la sustitución, los objetos de filterArgs se codifican de la siguiente forma:

  • Cada byte del array de byte (byte[]) se codifica como string, de acuerdo a la RFC 2254. Por ejemplo, el array {0, 1, 10, 100} se codificará como el string "\00\01\0a\64".
  • Los Strings son tratados como literales; los "*" y otros caracteres especiales definidos en la RFC 2254 que aparezcan en el string serán codificados de acuerdo a las reglas de la RFC 2254. Por ejemplo, un string de "*" se codifica como el string "\2a". Por lo tanto, para usar caracteres especiales en el filtro, debemos ponerlos en una expresión de filtro filterExpr.
  • Los objetos que no son ni un String ni un byte[] se convierten a su forma string mediante Object.toString() y luego se aplican las reglas para String.

Aquí tenemos un ejemplo que demuestra el uso de este método:

// Specify the filter arguments
byte[] key = {(byte)0x61, (byte)0x62, (byte)0x63, (byte)0x64, 
    (byte)0x65, (byte)0x66, (byte)0x67};
String name = "User";

// Perform the search
NamingEnumeration answer = ctx.search("ou=NewHires", 
    "(&(mySpecialKey={0}) (cn=*{1}))",      // Filter expression
    new Object[]{key, name},                // Filter arguments
    null);				    // Default search controls

La expresión de filtro especifica dos sustituciones. Los contenidos del array de byte key reemplazan a "{0}" y name reemplaza a "{1}". Observa el uso del comodín para la porción "cn" del filtro en la expresión de filtro. Al ejecutar este ejemplo tendremos la siguiente salida:

>>>cn=S. User
{myspecialkey=myspecialkey: abcdefg, 
 sn=sn: User, 
 objectclass=objectclass: top, person, organizationalPerson, 
     inetOrgPerson, extensibleObject, 
 mail=mail: suser@JNDITutorial.com, 
 userpassword=userpassword: [B@1dacd79e, 
 cn=cn: S. User
}

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