Conexao com Servidor LDAP

7 respostas
C

Preciso fazer uma conexao com o servidor LDAP, aqui tenho meu codigo

String username = "[email removido]";
        String password = "*********";
        
        Hashtable authEnv = new Hashtable(11);
        
        authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");  
        authEnv.put(Context.PROVIDER_URL, "ldap://192.168.1.167:389");  
        authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");  
        authEnv.put(Context.SECURITY_PRINCIPAL, username);  
        authEnv.put(Context.SECURITY_CREDENTIALS, password);
        
        try {
            DirContext context = new InitialDirContext(authEnv);
            System.out.println("Autenticado");
        } catch (Exception e) {
            e.printStackTrace();
        }

Mas tive o seguinte erro

javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]
	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2982)
	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2789)
	at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2703)
	at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293)
	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
	at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
	at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
	at acessldap.AcessLDAP.main(AcessLDAP.java:24)

Alguem ja passou por isso, sabem aonde errei

Valeu pela ajuda

7 Respostas

A

Bom dia,

Acredito que o seu problema está nessa linha:

authEnv.put(Context.SECURITY_PRINCIPAL, username);

Peça pro suporte de rede verificar se não está faltando adicionar os DN, CN ou OU para a autenticação.

Aproveite e dê uma olhada no Spring LDAP.

Abraços!

C

Estou pesquisando exatamentoe sobre isso, e pelo que vi é isso mesmo que esta faltando,

obrigado pela resposta

C

Consegui resolve a parte de se conectar no servidor, falta fazer autenticar mas uma luta agora

ate mais valeu pela resposta denovo

A

Posta o erro de autenticação.

Verifique se o seu serviço de autenticação (Microsoft AD, OpenLDAP, ou outro) possue autenticação com ou sem SSL…

Abraços!

C

Erro meu esqueci de por resolvido no post, eu consegui fazer tudo o que precisava com o servidor ldap ontem mesmo so esqueci de por o resolvido no post

valeu pelo interrese em me ajuda amigo

mas ja esta tudo funcionando do jeito correto

ate mais

G

CristianPalmaSola10:
Erro meu esqueci de por resolvido no post, eu consegui fazer tudo o que precisava com o servidor ldap ontem mesmo so esqueci de por o resolvido no post

valeu pelo interrese em me ajuda amigo

mas ja esta tudo funcionando do jeito correto

ate mais


além de colocar como resolvido, posta como fez, acredito que assim seu post estará agregando valor ao fórum e ajudando outros que tenham a mesma dificuldade.

C

Beleza entaum vou postar como ficou a minha solucao,

/**
 * @author cristian.urbainski
 * @since 26/07/2012
 * Esta classe faz a conexao com o servidor ldap
  */
public class ConnectServiceLDAP {
    
    private static final String USER   = "cn=admin,dc=consisanet,dc=com";
    private static final String PASSWD = "*******";
    private static final String LDAP_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
    private static final String LDAP_SERVIDOR = "ldap://localhost:389";
    private static final String TYPE_CONNECTION = "simple";
    
    @SuppressWarnings("UseOfObsoleteCollectionType")
    public static DirContext connect()
    {
        Hashtable authEnv = new Hashtable(11);
        
        authEnv.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_FACTORY);  
        authEnv.put(Context.PROVIDER_URL, LDAP_SERVIDOR);  
        authEnv.put(Context.SECURITY_AUTHENTICATION, TYPE_CONNECTION);  
        authEnv.put(Context.SECURITY_PRINCIPAL, USER);  
        authEnv.put(Context.SECURITY_CREDENTIALS, PASSWD);
        
        try {
            DirContext context = new InitialDirContext(authEnv);
            System.out.println("Autenticado com sucesso no servidor LDAP");
            return context;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        
    }
    
}
//Essa classe faz a busca dos dados no servidor
public class AcessLDAP {

    public static final String SEARCHBASE = "ou=People, dc=consisanet, dc=com";
    
    public static void main(String[] args) {
      
        DirContext dircontext = ConnectServiceLDAP.connect();
        
        //tentando buscar dados no servidor LDAP
        String login = "cristian.urbainski";
        String senha = "*********";
        
        Attributes attributes = new BasicAttributes(Boolean.FALSE);
        
        attributes.put(new BasicAttribute("uid", login));
        //attributes.put(new BasicAttribute("userPassword", senha));

        String atributosRetorno[] = new String[] { "uid", "userPassword", "givenName", "mail" };
        
        System.out.println("Buscando.......");
        
        try {
            
            NamingEnumeration resultado = dircontext.search(SEARCHBASE, attributes, atributosRetorno);
            
            while(resultado.hasMore())
            {
                SearchResult sr = (SearchResult) resultado.next();
                
                Attributes atributos = sr.getAttributes();
                
                NamingEnumeration todosAtributos = atributos.getAll(); 
                
                while(todosAtributos.hasMore()) {
                    Attribute attrib = (Attribute) todosAtributos.next();
                    String nomeAtributo = attrib.getID();
                    System.out.println("Atributo:" + nomeAtributo);
 
                    for (NamingEnumeration e = attrib.getAll(); e.hasMore();) {
                        if(nomeAtributo.equals("userPassword"))
                        {
                            System.out.println("\tvalor:" + new String((byte[])e.next()));
                        }
                        else
                        {
                            System.out.println("\tvalor:" + e.next());
                        }
                    }
                    
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
Criado 26 de julho de 2012
Ultima resposta 30 de jul. de 2012
Respostas 7
Participantes 3