Conexao com Servidor LDAP

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

        String username = "cristian.urbainski@consisanet.com";
        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

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!

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

obrigado pela resposta

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

ate mais valeu pela resposta denovo

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!

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

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

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();
        }
        
    }