Introdução a LDAP: Parte 1, Instalação e programação LDAP Java simples

O guia para aprender noções básicas do protocolo LDAP

Introdução

Seguindo as etapas descritas abaixo, será possível:

  • Instalar e configurar o IBM Tivoli Directory Server no Windows.
  • Adicionar, modificar e excluir entradas e atributos LDAP na árvore usando um navegador LDAP e a linha de comando.
  • Entender o conteúdo do arquivo LDIF (Lightweight Data Interchange Format).
  • Escrever um programa Java simples para acessar as informações armazenadas no seu servidor do LDAP.

Conceitos básicos sobre o LDAP

O LDAP é usado para armazenar informações relativamente estáticas. A frase "grave uma vez, leia muitas vezes" descreve o melhor uso do LDAP. O LDAP é estruturado como diretório otimizado para buscas. Sua estrutura em árvore é útil para estruturas organizacionais de conceitualização.

Cada entrada da árvore LDAP é composta de uma ou mais classes de objeto. Cada classe de objeto tem atributos armazenados em pares nome/valor. Um exemplo de par nome/valor de atributo LDAP é uid=c0001.

O esquema LDAP especifica:

  1. As classes e nomes de objeto usados para entradas na árvore LDAP.
  2. Os nomes dos atributos e tipos de operações suportadas por cada atributo.

A estrutura da sua árvore LDAP se baseará em um esquema.

Figura 1. Estrutura geral de uma árvore LDAP

Pode-se localizar uma entrada em LDAP especificando o nome distinto (dn) ou o nome distinto relativo (rdn). O dn é o caminho completo da árvore LDAP enquanto rdn é apenas um identificador exclusivo para uma entrada específico da árvore.

Um modo de conceitualizar facilmente a diferença entre dn e rdn é pensar na diferença entre orientações e um endereço. O dn seria o equivalente a dar orientações do aeroporto ao hotel. O rdn seria o endereço do hotel. De modo similar a um endereço, rdn deve ser exclusivo. Seria muito difícil encontrar um hotel no mapa da cidade se seu endereço não fosse exclusivo.


Dados de funcionários armazenados no LDAP

Para o seu projeto, a configuração do LDAP será relativamente simples—uma lista linear de entradas de funcionários.

Crie os nomes distintos para os funcionários usando o atributo uid no nome distinto (dn). Por exemplo, o dn para a gerente Barbara Jensen é uid=c0001,ou=people,dc=ibm,dc=com. O valor para o uid é um ID de empresa exclusivo. Usando um ID de empresa em vez do nome é mais fácil fazer a manutenção do seu LDAP. Por exemplo, se Barbara se casar e mudar de nome para Barbara Jensen-Howard, bastará mudar dois atributos: cn=Barbara Jensen-Howard e sn=Jensen-Howard. Se cn=Barbara Jensen,ou=people,dc=ibm,dc=com tivesse sido usado como nome distinto, seria preciso excluir a entrada LDAP inteira e regenerá-la como cn=Barbara Jensen-Howard,ou=people,dc=ibm,dc=com. Pense também no caso de haver dois funcionários com o mesmo nome. O uso de ID da empresa evita colisões de nome na sua árvore LDAP.

Abaixo, há uma tabela com nomes de funcionários do Departamento de faturamento e seu nome correspondente encontrado no LDAP. A segunda coluna lista o dn do funcionário. A terceira coluna mostra o rdn do funcionário.

Tablela 1. Nomes distintos e distintos relativos dos funcionários no LDAP
Nome do funcionárioNome distinto (dn) no LDAPNome distinto relativo (rdn) no LDAP
Barbara Jensen uid=c0001,ou=people,dc=ibm,dc=com uid=c0001
Stu Pretzman uid=c0002,ou=people,dc=ibm,dc=com uid=c0002
Varad Singh uid=c0003,ou=people,dc=ibm,dc=com uid=c0003
Steven Moyer uid=c0004,ou=people,dc=ibm,dc=com uid=c0004
Carla VanDyke uid=c0005,ou=people,dc=ibm,dc=com uid=c0005
Billy Parker uid=c0006,ou=people,dc=ibm,dc=com uid=c0006

Barbara Jensen é gerente do departamento de faturamento. As outras cinco entradas são de funcionários dela. Cada entrada no LDAP contém informações úteis sobre o funcionário, como número de telefonia, endereço de correspondência e e-mail.

Usaremos esses registros de funcionários do departamento de faturamento para preencher a árvore LDAP. Ao longo deste artigo vamos adicionar, modificar e excluir entradas LDAP desses registros de funcionários.


Configuração do IBM Tivoli Directory Server

A fim de aprender sobre LDAP, é útil ter um servidor do LDAP instalado no seu computador. As etapas a seguir demonstram como instalar o IBM Tivoli Directory Server no Windows.

Faça o download do IBM Tivoli Directory Server para Windows da IBM.

Descompacte o arquivo ZIP e instale-o em um diretório temporário. Na pasta ismp, clique duas vezes no ícone setup.exe para abrir o assistente. Escolha English como idioma do assistente de instalação. Aceite o contrato de licença.

Figura 2. Tela de boas-vindas

Escolha English como idioma. Nos painéis seguintes, será solicitada a instalação dos componentes do servidor de diretórios.

Figura 3. Idioma

Se DB2, GSKit ou WebSphere Application Server - Express Edition já estiver instalado, o assistente o detectará. Contudo, o DB2 deve estar instalado no mesmo servidor que seu servidor do LDAP. Caso contrário, será preciso instalar estes componentes. Instale a Web Administration Tool e o IBM WebSphere Application Server – Express embora não seja necessário tê-los disponíveis para concluir o exercício deste artigo. Clique em Next.

Figura 4. Recursos

A instalação do servidor do LDAP começará. Quando chegar a esse painel, clique no botão Next até chegar ao painel que pede para reiniciar seu computador.

Figura 5. Telas adicionais

No penúltimo painel, a configuração lhe pedirá para reiniciar o computador. Selecione o botão de opções Yes. Clique em Next.

Figura 6. Reiniciar o computador

Clique no botão Finish. O computador será reiniciado.

Figura 7. Reinicialização necessária do computador

Após a reinicialização do seu computador, faça o login novamente usando o mesmo ID do usuário. A IBM Tivoli Directory Server Configuration Tool será iniciada automaticamente.

Figura 8. Directory Server Configuration Tool

Clique na tarefa Administrator DN/password. Defina o ID de administrador como cn=root Enter ibm4root para a senha. Clique no botão OK.

Figura 9. Mudar DN e senha de administrador

O ID de administrador cn=root é o ID do usuário principal do LDAP e só deve ser usado para tarefas como modificações da árvore LDAP. Nunca deve ser fornecido a usuários LDAP.

Depois, escolha a tarefa Configure database. Escolha Create a new database. Clique no botão Next. Insira um ID de usuário e senha para o banco de dados. Clique em Next. Dê um nome ao banco de dados pcldap. Certifique-se de que o conjunto de códigos padrão (UTF-8/UCS-2) esteja selecionado. Clique em Next. Selecione uma letra de unidade. Clique no botão Next e depois em Finish. Após a conclusão da instalação do banco de dados, pressione o botão Close.

Figura 10. Configurar banco de dados

Selecione Manage suffixes na barra de tarefas. Digite dc=ibm, dc=com. Esse é o sufixo do esquema. Pressione o botão Add. Designaremos dc=ibm,dc=com como sufixo base do nosso grupo LDAP. Clique em OK para salvar as alterações. No futuro, é possível inserir sufixos base adicionais.

Figura 11. Gerenciar sufixos

Nesse ponto vamos preencher nosso LDAP com entradas de funcionários. Selecione Import LDIF data. Um arquivo LDIF (Lightweight Directory Interchange Format) é um formato de arquivo ASCII usado para carregar e salvar dados contidos em uma árvore LDAP. Além de conter as entradas de dados reais, um arquivo LDIF também contém os objetos usados para formar o esquema.

Procure o arquivo setup.ldif. Selecione a caixa de seleção Remove trailing spaces in Standard Import or Bulkload. Trata-se de uma Standard import. Clique no botão Import. Após a conclusão da importação, pressione Clear results. Depois, pressione o botão Close. O servidor do LDAP não pode estar em execução ao importarmos dados do LDIF usando a Directory Configuration Tool.

Figura 12. Importação dos dados do LDIF (Lightweight Directory Interchange Format)

Feche a Directory Server Configuration Tool selecionando, na barra de menus, File => Close.


Iniciando o servidor do LDAP

Antes de iniciar o servidor do LDAP é preciso ter um endereço IP definido para ele. Se seu servidor tiver endereço IP estático, ignore esta etapa. Se ele não tiver endereço IP estático, há duas opções. Para qualquer opção, é preciso saber o nome do seu servidor. Digite hostname na linha de comando. Para usar a primeira opção, inicie um prompt de comandos e digite ipconfig.

Figura 13. Prompt de comandos - saída ipconfig

Digite esse endereço IP no seu arquivo <window os directory>\system32\drivers\etc\hosts. Reinicie seu servidor. Isso permitirá que seu servidor do LDAP seja executado e que outros servidores se conectem ao seu LDAP enquanto o endereço IP dinâmico continuar ligado ao seu computador. Lembre-se de remover essa entrada do arquivo de hosts após terminar os testes. Se seu servidor do LDAP estiver sendo usado apenas para desenvolvimento local, é possível implementar a segunda opção. Basta adicionar um alias para seu nome do servidor no endereço do host local 127.0.0.1. No arquivo <window os directory>\system32\drivers\etc\hosts, adicione a seguinte entrada. Esse alias de host local pode permanecer no seu arquivo de hosts.

N.° para o teste de LDAP
127.0.0.1 <aqui deve ser incluído o nome do seu servidor>

Se não prestarmos atenção a esse aviso, sempre teremos inúmeros erros de ligação e o servidor do LDAP nunca vai iniciar.

É possível iniciar o servidor do LDAP a partir da linha de comando usando o comando <ldapinstalldir>\bin\ibmslapd.exe ou usar o painel Services. O servidor do LDAP é a entrada IBM Tivoli Directory Server V5.2 mostrada abaixo. Para algumas mudanças na configuração usando a IBM Tivoli Directory Server Configuration Tool é preciso parar o servidor de diretórios. O Admin Daemon nunca deve ser parado.

Figura 14. Admin Daemon é para administração de LDAP; o servidor de diretórios é o servidor do LDAP.

Visualizando a árvore LDAP

O Tivoli Directory Server tem um Web client que pode ser executado a partir do WebSphere Express Server. O arquivo WAR também pode ser instalado em um servidor WebSphere.


Adicionando uma entrada a partir da linha de comando

A IBM contratou uma nova funcionária chamada Susan Baker. Embora seja possível usar o navegador LDAP, uma entrada de funcionário tem atributos demais. É possível adicionar o funcionário usando o comando ldapadd e o arquivo addemployee.ldif. No diretório <ldapserver directory>\bin, digite o seguinte na linha de comando:

              ldapadd -h ldap://<ldaphostname> -D "cn=root" -w ibm4root -f 
              <ldif_directory_path>addemployee.ldif

O arquivo LDIF usado para adicionar a funcionária Susan Baker é mostrado abaixo.

Listagem 1. Arquivo addemployee.ldif

        # this is a comment the # must be in FIRST column

        version: 1
        
        ## ------------------------------------------------------------------------------------
        ## ePerson is an AUXILLIARY objectclass from IBM and must
        ## have a STRUCTURAL objectclass (inetOrgPerson in this case)
        ##
        ## this is an entry sequence and is preceded by a blank line
        
        dn: uid=c0007,ou=people,dc=ibm,dc=com
        objectclass: ePerson
        objectclass: inetOrgPerson
        cn: Susan Baker
        sn: Baker
        givenName: Susan
        initials: SAB
        title: Billing worker
        uid: c0007
        userpassword: hellome1
        mail: sbaker@ibm.com
        mail: susan.baker@ibm.com
        homephone: +1 999 111 3425
        telephoneNumber: +1 999 555 1262
        facsimileTelephoneNumber: +1 999 555 1292
        mobile: +1 999 555 141
        roomNumber: 0220
        carLicense: 6ABDE3
        o: ibm
        ou: Billing
        departmentNumber: 2604
        registeredAddress: 348 Parkside Dr Anywhere, IL 23480
        postalAddress: 347 Parkside Dr. Anywhere, IL 23480
        employeeNumber: 9899
        employeeType: full time
        preferredLanguage: en
        labeledURI: http://www-1.ibm.com/servers/eserver/iseries/ldap/schema/

Há vários benefícios de usar a linha de comando para carregar os arquivos LDIF em vez da Tivoli Directory Server Configuration Tool. A linha de comando é muito mais rápida do que a interface gráfica com o usuário. Também não é preciso parar o servidor do LDAP para carregar o arquivo LDIF. Parar um servidor do LDAP de produção pode causar rebuliço entre alguns usuários. Após executar ldapadd é preciso atualizar a árvore de diretórios no navegador do LDAP se quiser ver as atualizações. Selecione a entrada dc=ibm,dc=com e pressione o ícone Refresh.


Visualizando uma entrada a partir da linha de comando

Visualize sua atualização usando ldapsearch. A partir de uma linha de comando digite:

        ldapsearch -h ldap://<ldaphostname> -D "cn=root" -w ibm4root -b 
        "ou=people,dc=ibm,dc=com" "uid=c0007"

O –b indica onde começar a pesquisa na árvore. Visto que você adicionou a entrada para Susan Baker em ou=people,dc=ibm,dc=com, comece a pesquisa naquele nível da árvore. Também é possível pesquisar a árvore inteira dc=ibm,dc=com em busca do registro de Susan usando:

        ldapsearch -h ldap://<ldaphostname> -D "cn=root" -w ibm4root -b 
        "dc=ibm,dc=com" "uid=c0007"

Excluindo uma entrada a partir da linha de comando

O funcionário Billy Parker passou vários dias tentando instalar o IBM Tivoli Directory Server em um servidor que não tinha endereço IP estático e não atualizou seu arquivo de hosts. Sua gerente, Barbara, descobriu sua incompetência e Billy foi demitido. Remova-o do LDAP da empresa usando o comando ldapdelete.

              ldapdelete -h ldap://<ldaphostname> -D "cn=root" -w ibm4root 
              "uid=c0006,ou=people,dc=ibm,dc=com"

Modificando uma entrada a partir da linha de comando

A gerente do departamento de faturamento, Barbara Jensen, se mudou para uma nova casa e seu número do telefone também mudou para +1 999 222 3423. Ela também acrescentou outra linha telefônica no trabalho, +1 999 243 2312, e colocou sua foto no Web site da empresa. Atualize seu registro de funcionário usando a seguinte linha.

              ldapadd -h ldap://<ldaphostname> -D "cn=root" -w ibm4root -f 
              <ldif_directory_path>modifyemployee.ldif

O arquivo LDIF para modificar a entrada de Barbara Jensen é mostrado abaixo. O no arquivo permite múltiplas atualizações de atributo.

Listagem 2. Arquivo modifyemployee.ldif

              # this is a comment the # must be in first column 
              version: 1
              
              
              ## -----------------------------------------------------------
              ## ePerson is an AUXILLIARY objectclass from IBM and must
              ## have a STRUCTURAL objectclass (inetOrgPerson in this case)
              ## - Modify the Barbara Jensen entry setup in setup.ldif.
              #
              # Change her telephones and add a jpg.
              #
              ## this is an entry sequence and is preceded by a blank line
              
              dn: uid=c0001,ou=people,dc=ibm,dc=com
              changetype: modify
              add: telephonenumber +1 999 243 2312
              telephonenumber: +1 999 243 2312
              -
              replace: homephone
              homephone: +1 999 222 3423
              -
              add: jpegphoto
              jpegphoto: http://www.ibm.com/photo/babs.jpg

Formato das operações de linha de comando

O formato geral dos comandos LDAP discutidos é mostrado na tabela abaixo.

Tablela 2. Operações da linha de comando LDAP
Operação Formato
Adicionar ou Modificar ldapadd -h ldap://<ldaphostname> -D <DN raiz> -w <senha raiz> -f <ldif_file_path>
Procurar ldapsearch -h ldap://<ldaphostname> -D <DN raiz> -w <senha raiz> -b <DN de pesquisa base> <DN de pesquisa>
Excluir ldapdelete -h ldap://<ldaphostname> -D <DN raiz> -w <senha raiz> <DN a ser excluído>

Exibindo os dados do LDAP a partir do Internet Explorer

Um recurso interessante associado ao Internet Explorer é um catálogo de endereços ligado ao seu servidor do LDAP. Abra o Internet Explorer e digite a seguinte URL na sua barra de endereço.

ldap://<ldaphostname>/ou=people,dc=ibm,dc=com??one?(objectclass=*)

O programa Address Book do Internet Explorer é aberto, permitindo ver os funcionários do seu catálogo de endereços.

Figura 15. Endereço do Internet Explorer

Visão geral do formato de arquivo LDIF

O Lightweight Data Interchange Format (LDIF) é usado para representar entradas LDAP em formato de texto simples. Esta seção fornece uma breve descrição do formato de entrada LDIF.

A forma básica de uma entrada é mostrada abaixo. Uma sequência de entrada é precedida por uma linha em branco. Um comentário é indicado por um # na primeira coluna. Além disso, um espaço deve vir após : em um atributo.

# comment line
dn: <distinguished name>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>
...


Revisão do arquivo addemployee.ldif de Susan Baker.

Listagem 3. Arquivo addemployee.ldif

	    # this is a comment the # must be in FIRST column

            version: 1
            
            ## -----------------------------------------------------------------
            ## ePerson is an AUXILLIARY objectclass from IBM and must
            ## have a STRUCTURAL objectclass (inetOrgPerson in this case)
            ##
            ## this is an entry sequence and is preceded by a blank line
            
            dn: uid=c0007,ou=people,dc=ibm,dc=com
            objectclass: ePerson
            objectclass: inetOrgPerson
            cn: Susan Baker
            sn: Baker
            givenName: Susan
            initials: SAB
            title: Billing worker
            uid: c0007
            userpassword: hellome1
            mail: sbaker@ibm.com
            mail: susan.baker@ibm.com
            homephone: +1 999 111 3425
            telephoneNumber: +1 999 555 1262
            facsimileTelephoneNumber: +1 999 555 1292
            mobile: +1 999 555 141
            roomNumber: 0220
            carLicense: 6ABDE3
            o: ibm
            ou: Billing
            departmentNumber: 2604
            registeredAddress: 348 Parkside Dr Anywhere, IL 23480
            postalAddress: 347 Parkside Dr. Anywhere, IL 23480
            employeeNumber: 9899
            employeeType: full time
            preferredLanguage: en
            labeledURI: http://www-1.ibm.com/servers/eserver/iseries/ldap/schema/

As linhas que começam com um caractere # são comentários. É possível ter múltiplos caracteres #, mas eles devem ser seguidos por um espaço. O número da versão é tal que é possível acompanhar as mudanças no arquivo. A primeira linha da sequência de entrada é o nome distinto (dn). O atributo uid é a chave usada para localizar essa entrada na árvore. Assim, o nome distinto relativo (rdn) para essa entrada seria uid=c0007. A entrada de Susan Baker se localiza sob a unidade de organização da pessoa (ou). A unidade organizacional da pessoa se localiza sob a entrada de base dc=ibm,dc=com.

As próximas duas linhas definem a classe de objeto da entrada que contém as informações sobre Susan Baker. Os esquemas LDAP base lhe fornecem o objeto inetOrgPerson para armazenar informações sobre uma pessoa. Contudo, ele não dispõe de muitos atributos necessários no ambiente de negócios atual. Por exemplo, inetOrgPerson não tem um atributo para telefone celular. O IBM Tivoli Directory Server fornece uma classe auxiliar, ePerson, que tem muitos atributos úteis, como mobile e postalAddress. Uma lista completa de todos os esquemas fornecidos pela IBM pode ser baixada do repositório de esquema Tivoli.

O restante do arquivo LDIF contém vários atributos pessoais de Susan Baker.


Acessando dados de LDAP usando Java

Java fornece uma excelente estrutura para acessar os dados armazenados em LDAP. O procedimento é similar a outros tipos de acesso a recurso remoto. Abre-se uma conexão com o servidor do LDAP. É executada uma operação, como leitura, gravação ou exclusão. A conexão é fechada.

Abrindo a conexão LDAP

A Java Naming and Directory Interface (JNDI) é usada para acessar o servidor do LDAP. Um objeto DirContext é a conexão pela qual o programa Java se conecta ao LDAP. Usar o DirContext é simples. Construa um objeto Properties com a URL do servidor do LDAP, o nome e senha de usuário raiz, e vários itens Java de manutenção (factory de contexto, entidade de segurança e indicação). Esse objeto Properties é passado para o construtor de DirContext.

Todos os fragmentos mencionados abaixo se referem ao código de origem no programa TestLDAP.java.

            //--------------------------------------------------
            // Set up the environment for creating the initial context
            //--------------------------------------------------
            Properties props = new Properties();
            props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            
            props.setProperty(Context.PROVIDER_URL, "ldap://<lpadserver>:389");
            props.setProperty(Context.URL_PKG_PREFIXES, "com.sun.jndi.url");
            
            props.setProperty(Context.REFERRAL, "ignore");
            props.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
            
            // --------------------------------------------------
            //specify the root username
            // --------------------------------------------------
            props.setProperty(Context.SECURITY_PRINCIPAL, "cn=root");
            
            //--------------------------------------------------
            //specify the root password
            // --------------------------------------------------
            props.setProperty(Context.SECURITY_CREDENTIALS, "ibm4root");
            
            //--------------------------------------------------
            // Get the environment properties (props) for creating initial
            // context and specifying LDAP service provider parameters.
            //--------------------------------------------------
            DirContext ctx = new InitialDirContext(props);

Pesquisando o LDAP

Depois de estabelecer uma conexão com o servidor do LDAP, é possível pesquisar na árvore uma entrada correspondente ou atributos.

Primeiro é preciso configurar algumas restrições para sua pesquisa. No programa TestLDAP.java, as restrições são todas configuradas como SUBTREE_SCOPE.

	        SearchControls constraints = new SearchControls();
	        constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

Abaixo, uma tabela de todas as variáveis de parâmetro de escopo suportadas por setSearchScope().

Tablela 3. Parâmetros setSearchScope()
Valores para setSearchScope() O que faz
SUBTREE_SCOPE Inicia a entrada de base e a pesquisa, além de tudo que estiver abaixo dela. Essa é a pesquisa mais lenta e extensa.
ONELEVEL_SCOPE Pesquisa nas entradas abaixo da entrada de base.
OBJECT_SCOPE Pesquisa apenas a entrada de base. Essa é a pesquisa mais rápida e menos extensa.

A próxima etapa é configurar os atributos de entidade que serão preenchidos em resultado da pesquisa. Visto que todas as entidades interessantes pertencem ao esquema ePerson, o campo de atributo retornado é definido para um array de todos os atributos ePerson possíveis.

constraints.setReturningAttributes(EPERSON_ATTRIBUTE_LIST);

A seguir, é feita a pesquisa. A definição BASE_SEARCH acabou de ser configurada para ou=people,dc=ibm,dc=com, que é o pai da árvore de funcionários. Diferentes formatos de filtros de pesquisa também são especificados na origem.

NamingEnumeration results = ctx.search(BASE_SEARCH, filter, constraints);

O filtro de pesquisa pode ter qualquer um dos seguintes formatos.

Tablela 4. Filtros de pesquisa
Símbolo Filtro Exemplo Correspondências aos exemplos
~= Aproximação sn~=Jensen Qualquer variação em Jensen
= Igualdade sn=Jensen Corresponde apenas ao sobrenome Jensen. Esse é o formato de pesquisa mais comum.
> Maior que sn>Jensen Qualquer sobrenome que vem alfabeticamente após Jensen, p.ex., Pretzman.
>= Maior ou igual sn>=Jensen Sobrenome correspondente a Jensen ou que venha após este alfabeticamente.
< Menor que sn<Jensen Sobrenome antes de Jensen, p.ex., Baker
<= Menor ou igual sn<=Jensen Sobrenome correspondente ou precedente a Jensen.
=* Presença do atributo sn=* Qualquer entrada que contenha um atributo sn.
* Correspondência à cadeia de caractere curinga sn=Jen*n Qualquer cadeia de caractere, subcadeia ou supercadeia correspondente a Jensen.
& E (&(sn=Jensen) (initials=BJJ)) Qualquer entrada que corresponda a todas as condições. Nesse caso, o sobrenome Jensen com as iniciais BJJ.
| Ou (|(sn=Jensen) (initials=BJJ)) Qualquer entrada que corresponda a uma condição. O sobrenome Jensen ou as iniciais BJJ
! Não (sn=Jensen) A negativa da condição incluída. Todos os sobrenomes, exceto Jensen.

Após a pesquisa, o programa faz a iteração pelo conjunto de resultados usando o NamingEnumeration retornado pelo contexto. Cada atributo é impresso.

            if (results.hasMoreElements()) 
            {
            	System.out.println(" has returned results..\n");
            	bFoundIt = true;
            	// Since UID is unique across the entire directory,
            	// the search results should contain only one entry.
            	SearchResult sr = (SearchResult) results.next();
            	// ---------------------------------------------
            	// Get all available attribute types and their associated
            	// values and print them out.
            	// ---------------------------------------------
            	printAttributes(sr.getAttributes());
            } 
            else 
            {
            	System.out.println(" has returned no results..");
            }

Atualizando atributos

O código para atualizar os atributos de uma entrada é similar para a pesquisa. Primeiro, o programa deve encontrar a entrada a ser atualizada da mesma maneira de pesquisa descrita acima. Nesse ponto, os atributos da entrada podem ser alterados, adicionados ou removidos. O objeto ModificationItem é usado para alterar o atributo representado pelo objeto BasicAttribute.

            // Get all available attribute types and their associated
            // values.
            Attributes attributes = sr.getAttributes();
            
            // Specify the changes to make
            ModificationItem[] mods = new ModificationItem[1];
            
            // -------------------------------------------
            // remove the attribute
            // -------------------------------------------
            if (bRemoveAttribute) {
            	// eliminate the attribute
            	if (null != attributes.get(attrName)) {
            	         mods[0] = new ModificationItem(
            				DirContext.REMOVE_ATTRIBUTE,
            				new BasicAttribute(attrName, attrVal));
            	}
            }
            // -------------------------------------------
            // replace or add the attribute
            // -------------------------------------------
            else {
            	// do a replace of the attribute
            	if (null != attributes.get(attrName)) {
            		mods[0] = new ModificationItem(
            			DirContext.REPLACE_ATTRIBUTE,
            				new BasicAttribute(attrName, attrVal));
            	}
            	// add the attribute
                        else {
            		mods[0] = new ModificationItem(
            			DirContext.ADD_ATTRIBUTE, new BasicAttribute(
            						attrName, attrVal));
            	}
            }
            
            ctx.modifyAttributes(updateDN + "," + BASE_SEARCH, mods);

Feche a conexão

Após executar qualquer operação no servidor do LDAP, é preciso fechar a conexão. Colocando a chamada de fechamento em um bloco finally, garantimos que a conexão LDAP sempre será fechada.

            //always close the directory context when you are done
            finally {
            	try {
            		if (null != ctx)
            			ctx.close();
            	} catch (Exception e2) {
            	}
            }

Executar o programa de amostra

Para executar o programa de amostra do LDAP, digite java -jar createLDAP.jar em uma linha de comando.


Conclusão

Se você chegou até este ponto, deve ter conhecimento de trabalho sobre o LDAP. Você entende o conceito de nomes distintos e distintos relativos. Conhece as etapas para instalar o IBM Tivoli Directory Server. É possível adicionar, modificar ou excluir entradas LDAP usando o navegador LDAP e a linha de comando. Entende o formato de arquivo LDIF. Por fim, aprendeu a usar JNDI para acessar programaticamente seu servidor do LDAP.

Recursos

Aprender

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tivoli
ArticleID=973471
ArticleTitle=Introdução a LDAP: Parte 1, Instalação e programação LDAP Java simples
publish-date=07022010