Search em LDAP

Olá pessoal,

tenho um modelo como o abaixo.

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. code[/code]

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

[code]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
[/code]

Desde já agradeço.

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

[]'s

uma chamada direta no searchList não traz nada?

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

[quote=Javabuntu]uma chamada direta no searchList não traz nada?

searchList("ou=Operador,ou=Depto2,dc=example,dc=com", "&(objectClass=*)") [/quote]

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.

[quote=leandropiovezan][quote=Javabuntu]uma chamada direta no searchList não traz nada?

searchList("ou=Operador,ou=Depto2,dc=example,dc=com", "&(objectClass=*)") [/quote]

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.[/quote]

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

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.

[code]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();

}
}[/code]