Para esta parte do tutorial utilizaremos uma biblioteca, a
JLDAP, disponibilizada pela Novell para acessar o nosso diretório. Além do
OpenLDAP, esta biblioteca também realiza comunicação com o Apache Directory Server.
No momento da escrita deste tutorial a última versão disponibilizada pela Novell é datada de 10 de outubro de 2009. O arquivo utilizado está no pacote 'novell-jldap-devel-2009.10.07-1unix.tar.gz', encontrado em
Novell Developer.
Faça download do pacote .tar.gz mencionado anteriormente e descompacte-o, copie o arquivo ldap.jar que está dentro da pasta /lib para o diretório da sua aplicação.
Crie uma classe Java com nome LDAP com o seguinte conteúdo.
Arquivo LDAP.java:
/*Importa todas as classes do pacote com.novell.ldap.*/
import com.novell.ldap.*;
public class LDAP{
public static void main(String[] args) throws Exception{
/*Instancia um objeto LDAPConnection*/
LDAPConnection conn = new LDAPConnection();
/*Cria conexão com servidor 192.168.199.105 na porta 389*/
conn.connect("192.168.199.105", 389);
/*Efetua o bind no servidor passando a versão do servidor,
o administrador do diretório
e a senha como um array de bytes.*/
conn.bind(LDAPConnection.LDAP_V3, "cn=Naza,dc=ufra,dc=br",
"queroEntrar".getBytes());
/*Realiza busca no servidor baseada nos seguintes parâmetros:
--distinguished name da base de origem da busca;
--escopo da busca, que também pode ser modificado para
pesquisar na subárvore do distinguished name;
--filtro por algum critério;
--atributos a serem recuperados;
--true para retornar apenas o nomes dos atributos,
false para retornar nomes e valores dos atributos encontrados*/
LDAPSearchResults search = conn.search(args[0], LDAPConnection.SCOPE_ONE,null, null, false);
while(search.hasMore()){
/*Recupera cada entidade presente no resultado.*/
LDAPEntry entry = search.next();
/*Retorna os atributos para cada entidade*/
LDAPAttributeSet attribute = entry.getAttributeSet();
java.util.Iterator it = attribute.iterator();
/*Itera sobre os atributos imprimindo o nome e valor.*/
while(it.hasNext()){
LDAPAttribute att = (LDAPAttribute) it.next();
System.out.println(att.getName() +"=>"+ att.getStringValue());
}
System.out.println();
}
}
}
Compile o arquivo e execute-o passando a subárvore de onde deve iniciar a busca. Por exemplo:
Compilando a classe LDAP:
# javac -classpath .:./ldap.jar LDAP.java
Caso não queira modificar seu classpath, compile e execute passsando-o como parâmetro como mostrado nos exemplos.
Executar passando o parâmetro dc=aluno,dc=ufra,dc=br retornará os subdiretórios de br/ufra/aluno, como mostrado no exemplo abaixo:
# java -classpath .:./ldap.jar LDAP dc=aluno,dc=ufra,dc=br
Esta execução retorna o seguinte:
ou=>agroboy
objectClass=>organizationalUnit
ou=>bichogrilo
objectClass=>organizationalUnit
ou=>computeiro
objectClass=>organizationalUnit
Executando o arquivo passando outro parâmetro.
java -classpath .:./ldap.jar LDAP ou=computeiro,dc=aluno,dc=ufra,dc=br
Retorno:
userPassword=>{SSHA}dyaOuUNnVQ04uRwq5k55KcwGgumOEZhp
uidNumber=>1010
uid=>rudini
loginShell=>/bin/bash
gecos=>Rudini AuAu PitBull
gidNumber=>100
sn=>PitBull
cn=>Rudini
homeDirectory=>/home/rudini
objectClass=>posixAccount
Agora que você sabe como consultar uma base LDAP usando Java, experimente criar métodos para inserção e remoção de entidades do banco de dados. Divirta-se! :-)
Este tutorial foi criado baseando-se nos materiais de aula da disciplina de Administração de Serviços de Redes de Computadores ofertada pelo Departamento de Ciência da Computação da Universidade Federal de Lavras, no tutorial de Rafael Felix do blog Rolling With Code, citado nos links abaixo, e na documentação fornecida pela Novell junto com os pacotes.
Alguns links interessantes:
*** Os nomes de pessoas e entidades usados neste tutorial são fictícios, não fazem referência a nenhum indivíduo e não é intenção do autor denegrir a imagem de qualquer indivíduo/entidade.