Conectar, validar e buscar em LDAP

6 respostas
J

Ola pessoal boa tarde,

estou a dois dias pesquisando no forum e no google uma forma simples de trabalhar com LDAP no java.

encontrei alguns poucos exemplos uteis, mais que não foram suficientes para que eu consiga o que to precisando.

busco uma classe ou biblioteca onde precise informar os dados do meu dominio e possa realizar busca dos usuarios no AD por um atributo (login, email etc…)

alguem pode me dar uma luz?

6 Respostas

S

http://www.springsource.org/ldap

J

sando eu li todo o link e a documentação e não consegui fazer a conexao com os exemplos citados.

eu tentei usar a LDAP and JNDI

e consegui a conexão com o seguinte codigo:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://[ENDEREÇO_DO_MEU_SERVER]:389");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,"cn=Directory Manager"); // specify the username
env.put(Context.SECURITY_CREDENTIALS,"password");           // specify the password
DirContext ctx = new InitialDirContext(env);

agora preciso fazer a validação e consultar os atributos dos usuarios, porem não consigo entender os codigos e filtros de consulta que o java faz no AD.

o site que estou vendo é esse, mas ta complicado de entender esse AD :frowning:

tem mais alguma dica?

S

aqui http://www.javaworld.com/jw-06-2007/jw-06-springldap.html tem um bom exemplo explicando a diferença de se usar JNDI e Spring.
Eu particularmente prefiro o Spring por abstrair muita coisa, facilitando nossa vida.

A

No link abaixo tem um exemplo simples de como usar OpenLdap com Tomcat

Você deve utilizar o JNDIRealm

http://today.java.net/pub/a/today/2005/05/31/tomcatldap.html

O JXplorer também ajuda a navegar pela árvore do LDAP

abs

T

Olá Pessoal!

Eu tenho uma caso parecido, eu consigo logar com os dados da conexão, pois testei os dados usando a ferramenta LdapExplorerTool e com os dados da conexão visualizo a hierarquia. Meu problema é que se tento logar com algum usuário de acesso do sistema ele não acha esse usuário que tenta logar. Se eu colocar o correto do usuário que ta logando ai funciona. Exemplo:

Tenho no Ldap meu root como “ou=principal”, dentro da principal tenho outras “ou”: “ou=nivel1” e “ou=nivel2”. Quando entro como administrador na “OU” principal funciona mas quando tento entrar com um “CN” de outros niveis exemplo “ou=nivel1” não consegue achar esse usuário. É como se ele não conseguisse percorrer a arvore de nós.

Pesquisando na web o pessoal usa nos exemplos para pesquisar o usuario algo assim:

@SuppressWarnings("unchecked")
	public Usuario getUsuario(final String userName){					
            AndFilter filter = new AndFilter();
            filter.and(new EqualsFilter("objectclass", "person")).and(new EqualsFilter("sAMAccountName", userName));            
            Usuario user = new Usuario();
            user.setUserName(userName); 
      
            SearchControls s = new SearchControls();
            s.setSearchScope(SearchControls.SUBTREE_SCOPE);
            try {
                List<Usuario> users = getLdapTemplate().search(getDnFromUser(user,USUARIOS_OU), filter.encode(), s, new UsuarioContextMapper());
                
                if (!users.isEmpty()) {
                        return users.get(0);
                }
             // Se um usuario inexiste for repassado, e lancada uma excessao de NameNotFoundException. Nesse caso, retorna nulo, pois nao encontrou o usuario   
            } catch( NameNotFoundException e ) {
                Logger.getLogger(ADService.class.getName()).log(Level.INFO, "Usuário inexistente - getUsuario: " + userName, e);
                return null;    
            }                
            return null;
	}

O SearchControls.SUBTREE_SCOPE pelo que vi é era para percorrer a arvore dos nós abaixo da principal.

Alguem já passou por algo parecido?

T

Olá Pessoal!, Na maneira que eu estava tentando eu verificava se um “CN=Nome” esta cadastrado, pode ser devido a maneira em que eles foram estruturado não conseguia verificar dando o erro do usuário logado (erro de conexão).

Consegui resolver usando o “sAMAccountName” (login) para a autenticação, ai passou, anulando o “CN”, sem validar o CN.

Criado 8 de fevereiro de 2011
Ultima resposta 14 de mai. de 2014
Respostas 6
Participantes 4