Search em LDAP

5 respostas
L

Olá pessoal,

tenho um modelo como o abaixo.
[img]http://www.gisconsult.com.br/downloads/imgldap.png[/img]

Gostaria de montar um Search que retornasse todos as pessoas que estão no grupo Operador. Tentei da seguinte maneira e não consegui resultados.
(&(objectClass=organizationalUnit)(ou=Supervisor))

Abaixo o código que utilizei para criar a estrutura.

dn: dc=example,dc=com
objectClass: domain
objectClass: extensibleObject
objectClass: top
dc: example

dn: ou=Depto1,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Depto1

dn: ou=Depto2,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Depto2

dn: ou=Supervisor,ou=Depto1,dc=example,dc=com
objectClass: organizationalUnit
ou: Supervisor

dn: ou=Usuario,ou=Depto1,dc=example,dc=com
objectClass: organizationalUnit
ou: Usuario

dn: ou=Gerente,ou=Depto2,dc=example,dc=com
objectClass: organizationalUnit
ou: Gerente

dn: ou=Operador,ou=Depto2,dc=example,dc=com
objectClass: organizationalUnit
ou: Operador

dn: cn=Julio, ou=Supervisor,ou=Depto1,dc=example,dc=com
objectClass: organizationalPerson
sn: Julio
cn: Julio

dn: cn=Ze, ou=Supervisor,ou=Depto1,dc=example,dc=com
objectClass: organizationalPerson
sn: Ze
cn: Ze

dn: cn=Ana, ou=Usuario,ou=Depto1,dc=example,dc=com
objectClass: organizationalPerson
sn: Ana
cn: Ana

dn: cn=Joao, ou=Gerente,ou=Depto2,dc=example,dc=com
objectClass: organizationalPerson
sn: Joao
cn: Joao

dn: cn=Carlos, ou=Gerente,ou=Depto2,dc=example,dc=com
objectClass: organizationalPerson
sn: Carlos
cn: Carlos

dn: cn=Antonio, ou=Operador,ou=Depto2,dc=example,dc=com
objectClass: organizationalPerson
sn: Antonio
cn: Antonio

dn: cn=Pereira, ou=Operador,ou=Depto2,dc=example,dc=com
objectClass: organizationalPerson
sn: Pereira
cn: Pereira

Desde já agradeço.

5 Respostas

F

Ja ouviu falar no JLDAP da Novell? de uma procurada nessa biblioteca, exelente para manipular o LDAP.

[]'s

J

uma chamada direta no searchList não traz nada?

searchList("ou=Operador,ou=Depto2,dc=example,dc=com", "&(objectClass=*)")
L

Javabuntu:
uma chamada direta no searchList não traz nada?

searchList("ou=Operador,ou=Depto2,dc=example,dc=com", "&(objectClass=*)")

na verdade não estou testando no Java ainda, estava testando no “Apache Directory Studio” ainda.

Esse método searchList vc usa de qual api? é alguma nativa do java mesmo ou de terceiros?

agradecido.

J

leandropiovezan:
Javabuntu:
uma chamada direta no searchList não traz nada?

searchList("ou=Operador,ou=Depto2,dc=example,dc=com", "&(objectClass=*)")

na verdade não estou testando no Java ainda, estava testando no “Apache Directory Studio” ainda.

Esse método searchList vc usa de qual api? é alguma nativa do java mesmo ou de terceiros?

agradecido.

Entendi…
esse método é da JNDI, api nativa… quando usei foi essa… foi bem tranquilo…

agora o Spring oferece uma api que é exatamente pra trabalhar com LDAP, o Spring LDAP, no fundo deve usar JDNI porém com muitas coisas já transparentes para o desenvolvedor e melhorias de performance também… porque buscar numa árvore grande a coisa complica se não trabalhar corretamente…

flw Hewerton

L

Olá

criei uma classe para fazer a leitura do ldap. Fiz alguns testes e estou tendo problemas quanto a autenticação.
Nesse caso, não consigo criar uma conexão no Apache Directory Studio do tipo "No Authentication" para resolver o problema. Como é feita a autenticação então?

Fora isso, será que há algo a mais que precisa ser feito?

EDIT: Consegui autenticar.
env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
    env.put(Context.SECURITY_CREDENTIALS, "pass");
Mas agora sempre retorna null. Tipo, queria retornar os usuários que fazem parte do grupo Supervisor, apenas os nomes deles.
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

public class LdapSearch {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();

    String sp = "com.sun.jndi.ldap.LdapCtxFactory";
    env.put(Context.INITIAL_CONTEXT_FACTORY, sp);

    String ldapUrl = "ldap://localhost:10389/dc=example,dc=com";
    env.put(Context.PROVIDER_URL, ldapUrl);

    DirContext dctx = new InitialDirContext(env);
    
    String base = "ou=Depto1";

    SearchControls sc = new SearchControls();
    String[] attributeFilter = { "postalCode" };
    sc.setReturningAttributes(attributeFilter);
    sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

    String filter = "(ou=Supervisor)";

    NamingEnumeration results = dctx.search(base, filter, sc);
    while (results.hasMore()) {
      SearchResult sr = (SearchResult) results.next();
      Attributes attrs = sr.getAttributes();

      System.out.println(attrs.get("postalCode"));
    }
    dctx.close();
  }
}
Criado 30 de abril de 2009
Ultima resposta 4 de mai. de 2009
Respostas 5
Participantes 3