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