DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Artigo Java Magazine 74 - Primeiros passos com o Spring LDAP

Entenda os conceitos dessa poderosa ferramenta e aprenda a tirar melhor proveito do LDAP






Primeiros passos com o Spring LDAP

Conceitos básicos e utilização

Entenda os conceitos dessa poderosa ferramenta e aprenda a tirar melhor proveito do LDAP


De que trata o artigo:

Spring LDAP. Neste artigo são apresentados os principais conceitos relativos a essa biblioteca e exemplos do seu uso para efetuar consultas no LDAP. Além disso, é feita uma breve introdução à árvore LDAP e seus princípios.

Para que serve:

Fornecer uma alternativa simples e produtiva para acesso ao LDAP. O uso do LDAP em aplicações corporativas é um requisito de muitos sistemas, e o conhecimento de uma ferramenta flexível permite ao desenvolvedor construir consultas de forma mais rápida, simples e de manutenção mais fácil.

Em que situação o tema é útil:

O Spring LDAP facilita o uso do diretório LDAP em aplicações corporativas e embute mais produtividade à manipulação da árvore através do Java. A ferramenta é uma ótima alternativa para o desenvolvimento tradicional, baseado nas classes dos pacotes javax.naming e javax.naming.directory, oferecendo uma API extremamente rica e flexível.

Primeiros passos com o Spring LDAP:

Neste artigo são abordados os principais conceitos do LDAP e uma alternativa de uso – o Spring LDAP – é apresentada em detalhes. Um exemplo completo de consulta ao LDAP é explicado e demonstrado através de duas estratégias compatíveis: uso da API tradicional Java e uso da biblioteca Spring LDAP.

Além disso, demonstra-se de forma concisa como utilizar a biblioteca para executar operações CRUD sobre o LDAP. Assim, é possível entender as facilidades oferecidas pelo Spring LDAP e a vantagem de seu uso, tanto em termos de velocidade de desenvolvimento, quanto em compreensão do código escrito, manutenção e evolução.

 O LDAP é comumente usado para autenticação e autorização de usuários em aplicações corporativas. Apesar do uso difundido, esse software é visto por muitos como uma “caixa-preta”, um sistema “complexo” ou só acessível ao pessoal especializado em segurança da informação.

Esse preconceito faz com que o LDAP não seja utilizado em sua potencialidade, e muitas das informações disponíveis nesse repositório acabam repetidas no banco de dados.

O Spring LDAP é uma ferramenta que simplifica o acesso ao LDAP, utilizando os conceitos difundidos pelo framework Spring. Essas facilidades permitem um uso mais completo e simples do LDAP e aproximam esse software dos desenvolvedores comuns.

LDAP: conceitos básicos

O LDAP (Lightweight Directory Access Protocol) é um dos protocolos mais conhecidos e utilizados em grandes corporações. Apesar de se tratar de um protocolo, o termo LDAP normalmente é utilizado para referir-se ao servidor LDAP, um serviço de diretório que é acessado via TCP/IP.

Assim como em qualquer serviço de diretório, a estrutura do LDAP é hierárquica e os objetos e atributos ali armazenados são distribuídos segundo uma ordem lógica (semelhante a uma estrutura de arquivos no sistema operacional). O LDAP na verdade é um banco de dados especializado e otimizado para operações de busca e leitura, o que torna as consultas significativamente mais performáticas que a escrita/atualização de dados. Exemplos conhecidos de servidores LDAP são: OpenLDAP, Apache Directory Server, Windows Active Directory e Sun LDAP Server.

Entendendo os detalhes

A árvore do LDAP pode armazenar qualquer tipo de informação. Normalmente associamos o LDAP a conceitos como segurança, usuários e grupos, mas também é possível (e comum) utilizá-lo para guardar informações sobre os ativos da corporação, como departamentos, computadores, impressoras, etc.

Em um diretório LDAP cada nó é denominado entrada (entry). A entrada representa um conjunto de atributos e cada atributo possui um tipo (também chamado de nome) e um ou mais valores. O tipo do atributo é um uma sigla intuitiva e significativa, como “cn” para “common name”, “o” para “organization”, etc. A Tabela 1 exibe alguns exemplos comuns.

 Cada entrada é identificada através do seu Distinguished Name (DN), que é único na árvore e assim permite que o nó seja referenciado sem ambigüidades. O DN é uma string, formada pelo nome relativo da entrada (denominado Relative Distinguished Name, ou simplesmente RDN), seguido pelo DN da entrada pai.

Uma maneira simples de entender esse conceito é enxergar o DN como o caminho completo de um arquivo no disco rígido. O caminho é formado pelo nome do arquivo e todos os diretórios que definem sua localização. Por exemplo, para o arquivo /home/andre/teste.txt o RDN seria teste.txt e o DN /home/andre/teste.txt, que é formado pelo DN do nó pai (/home/andre/) + RDN do nó.

LDAP em aplicações Java EE

O uso do LDAP para autenticação e autorização é bastante comum, e a maioria dos servidores de aplicação oferece formas simples de acessá-lo. Em geral, configura-se um realm, que encapsula a consulta ao LDAP e permite integração ao JAAS, o serviço padrão de segurança para aplicações corporativas. O realm utiliza as classes e interfaces dos pacotes javax.naming e javax.naming.directory.

 

realm: Um realm é um repositório de usuários e grupos que possui mecanismos para identificar usuários válidos para uma aplicação (mais detalhes em http://java.sun.com/javaee/5/docs/tutorial/doc/bnbxj.html).

Acessando o LDAP de forma programática

Apesar da implementação JAAS de cada servidor de aplicação encapsular as consultas necessárias para autenticação e autorização de usuários contra a árvore do LDAP e esconder do desenvolvedor as particularidades envolvidas nessa comunicação, muitas vezes surge a necessidade de se consultar dados específicos de um usuário, como seu departamento, email, telefone, etc.

Esse procedimento exige codificar “no braço” o acesso e a consulta utilizando o protocolo. Obviamente Java permite esse tipo de consulta, mas o processo exige certo esforço e uma quantidade razoável de código de “infra-estrutura”.

A Listagem 1 mostra o acesso tradicional ao LDAP usando as APIs nativas. A Figura 1 ilustra a árvore utilizada no exemplo, enquanto a configuração do ambiente é detalhada no quadro “Configurando o ambiente”.

 O método recuperarNomesFuncionarios() da classe TradicionalDAO (Listagem 1) possui o código para consultar os funcionários de um departamento cadastrados no LDAP. O método recebe como argumento o nome do departamento e retorna uma lista contendo os nomes dos funcionários alocados nesse departamento.

Para realizar a consulta no LDAP, o primeiro passo consiste em preencher as propriedades do contexto. As propriedades são armazenadas em um Hashtable e informam o endereço e porta do servidor LDAP além do nó inicial da árvore (o=codecompany). É importante notar que nenhuma credencial é fornecida, já que a conexão é feita em modo anônimo.

 

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,

  "com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.PROVIDER_URL, "ldap://localhost:10389/o=codecompany");

 

A seguir o próprio contexto é criado e armazenado em uma variável do tipo DirContext. O contexto encapsula o acesso ao LDAP e permite que operações de busca, inclusão e exclusão de atributos e entradas seja executada a partir dessa variável.

 

DirContext ctx;

try {

  ctx = new InitialDirContext(env);

} catch (NamingException e) {

  throw new RuntimeException(e);

}

"



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
André Dantas Rocha

é mestre em Engenharia de Software pela USP, arquiteto e sócio da Code Company.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
2   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03