Problemas para buscar todos os grupos de um determinado usuário no AD via LDAP
7 respostas
gabriel.coelho
Galera…
por favor, alguem me ajude…rs…
Estou conseguindo fazer a autenticação normal no Action Directory, porém, gostaria de exibir em uma jsp após o usuario se autenticar todos os grupos que na qual ele pertence…
Estou tentando fazer a busca assim:
StringentryDN="dc=miqldc1,dc=microquimica,dc=int";StringuniqueMember="cn="+usuario+",ou=users,dc=miqldc1,dc=microquimica,dc=int";NamingEnumerationresults=null;SearchControlssearch=newSearchControls();search.setSearchScope(SearchControls.SUBTREE_SCOPE);results=ctx.search(entryDN,"(&(objectClass=group)(member="+uniqueMember+"))",search);while(results.hasMore()){SearchResultsearchResult=(SearchResult)results.next();Attributesattributes=searchResult.getAttributes();Attributeattr=attributes.get("cn");//Recuperando o CommonName do grupo System.out.println(attr.get());}ctx.close();
Porém quando chamo o search, ele me lança essa exception:
Provavelmente o ‘dn’ do usuário que você está usando para autenticar na hora da busca está errado.
gabriel.coelho
Cara…mas como isso é possivel??
O DN aqui é miqldc1.microquimica.int…não esta certo a forma que montei??
Rafael_Nunes
ENão, a zica não é nesse código que você postou, deve ser antes disso.
gabriel.coelho
Onde vc acha que pode ser?
No log de erro, ta me mostrando a que ocorreu na linha 65 que é onde eu chamo o SEARCH passando os parametros entryCN e uniqueMember
if(("logar").equals(request.getParameter("act"))){Stringusuario=null;Stringsenha=null;Hashtableenv=newHashtable(11);env.put(Context.SECURITY_AUTHENTICATION,"simple");env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL,"ldap://00.0.0.0:389");usuario=request.getParameter("usuario");senha=request.getParameter("senha");// Autentica o usuario com essas informações env.put(Context.SECURITY_PRINCIPAL,usuario);env.put(Context.SECURITY_CREDENTIALS,senha);try{// Cria o Initial Context longinit=System.currentTimeMillis();DirContextctx=newInitialDirContext(env);//Se passou deste ponto sem exeção, é porque autenticou longfim=System.currentTimeMillis();System.out.println("Autenticou normalmente: "+((fim-init)/1000)+" segundos");StringentryDN="DC=miqldc1,DC=microquimica,DC=int";StringuniqueMember="cn="+usuario+"OU=Users, DC=miqldc1,DC=microquimica,DC=int";NamingEnumerationresults=null;SearchControlssearch=newSearchControls();search.setSearchScope(SearchControls.SUBTREE_SCOPE);results=ctx.search(entryDN,"(&(objectClass=group)(member="+uniqueMember+"))",search);while(results.hasMore()){SearchResultsearchResult=(SearchResult)results.next();Attributesattributes=searchResult.getAttributes();Attributeattr=attributes.get("cn");//Recuperando o CommonName do grupo System.out.println(attr.get());}ctx.close();}catch(Exceptionex){System.out.println("Problema para autenticar : "+ex.getMessage());ex.printStackTrace();}finally{out.close();}}}
Valeu.
Rafael_Nunes
Eu acredito que o problema esteja em: env.put(Context.SECURITY_PRINCIPAL, usuario);
Esse parâmetro que você pega de request é o nome do usuário?
Porque no SERCURITY_PRINCIPAL você tem de colocar o dn completo.
gabriel.coelho
Entao cara…
Mas to tentando fazer com o dn completo também…
Estou recuperando o usuario pela request e dps eu concateno com o restante assim:
Aqui na empresa, o caminho do dominio é:
miqldc1 = nome do computador Domain Controler
microquimica.int = nome do dominio.
Esta correto essa maneira de criar?
gabriel.coelho
Eu consegui fazer ele parar de lançar aquela exception do dn.
Mas agora ele nao esta entrando no laço while. O results esta Null eu acho…
no uniqueMember e no entryDN estou fazendo correto?
Estou postando o código aqui,
StringentryDN="ou=Microquimica,dc=microquimica,dc=int";StringuniqueMember="cn=usuario,ou=Usuários,ou=Microquimica,dc=microquimica,dc=int";NamingEnumerationresults=null;SearchControlssearch=newSearchControls();search.setSearchScope(SearchControls.SUBTREE_SCOPE);results=ctx.search(entryDN,"(&(objectClass=group)(member="+uniqueMember+"))",search);while(results.hasMore()){System.out.println("passou 1");SearchResultsearchResult=(SearchResult)results.next();System.out.println("passou 2");Attributesattributes=searchResult.getAttributes();System.out.println("passou 3");Attributeattr=attributes.get("cn");//Recuperando o CommonName do grupo System.out.println("passou 4");System.out.println(attr.get());}ctx.close();