Problemas para buscar todos os grupos de um determinado usuário no AD via LDAP

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:

                String entryDN = "dc=miqldc1,dc=microquimica,dc=int";   
                String uniqueMember="cn="+usuario+",ou=users,dc=miqldc1,dc=microquimica,dc=int"; 
                NamingEnumeration results = null;   
                SearchControls search = new SearchControls();   
                search.setSearchScope(SearchControls.SUBTREE_SCOPE);   
                results = ctx.search(entryDN, "(&(objectClass=group)(member=" + uniqueMember + "))",   
                               search);   
                while (results.hasMore()) {   
                        SearchResult searchResult = (SearchResult) results.next();   
                        Attributes attributes = searchResult.getAttributes();   
                        Attribute attr = 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:

Agradeço a todos.

Provavelmente o ‘dn’ do usuário que você está usando para autenticar na hora da busca está errado.

Cara…mas como isso é possivel??

O DN aqui é miqldc1.microquimica.int…não esta certo a forma que montei??

ENão, a zica não é nesse código que você postou, deve ser antes disso.

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"))){
            String usuario = null;
            String senha = null;
            
            Hashtable env = new Hashtable(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   
                long init = System.currentTimeMillis();   
                DirContext ctx = new InitialDirContext(env); //Se passou deste ponto sem exeção, é porque autenticou   

                long fim = System.currentTimeMillis();   
                System.out.println("Autenticou normalmente: " + ((fim - init) / 1000) + " segundos");  
                
                String entryDN = "DC=miqldc1,DC=microquimica,DC=int";   
                String uniqueMember="cn="+usuario+"OU=Users, DC=miqldc1,DC=microquimica,DC=int"; 
                NamingEnumeration results = null;   
                SearchControls search = new SearchControls();   
                search.setSearchScope(SearchControls.SUBTREE_SCOPE);   
                results = ctx.search(entryDN, "(&(objectClass=group)(member=" + uniqueMember + "))", search);   
                while (results.hasMore()) {   
                        SearchResult searchResult = (SearchResult) results.next();   
                        Attributes attributes = searchResult.getAttributes();   
                        Attribute attr = attributes.get("cn"); //Recuperando o CommonName do grupo   
                        System.out.println(attr.get());   
                }                   

                ctx.close();                 
             }catch(Exception ex){   
                System.out.println("Problema para autenticar : " + ex.getMessage());   
                ex.printStackTrace();  
            } finally { 
                out.close();
            }
        } 
    }

Valeu.

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.

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:

results = ctx.search(entryDN, "(&(objectClass=group)(member=" + uniqueMember + "DC=microquimica,DC=int))", search);   

Aqui na empresa, o caminho do dominio é:
miqldc1 = nome do computador Domain Controler
microquimica.int = nome do dominio.

Esta correto essa maneira de criar?

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,

                String entryDN = "ou=Microquimica,dc=microquimica,dc=int"; 
                String uniqueMember="cn=usuario,ou=Usuários,ou=Microquimica,dc=microquimica,dc=int"; 
                NamingEnumeration results = null;   
                SearchControls search = new SearchControls();   
                search.setSearchScope(SearchControls.SUBTREE_SCOPE);   
                results = ctx.search(entryDN, "(&(objectClass=group)(member=" + uniqueMember + "))", search); 
                while (results.hasMore()) {   
                        System.out.println("passou 1");   
                        SearchResult searchResult = (SearchResult) results.next();   
                        System.out.println("passou 2");   
                        Attributes attributes = searchResult.getAttributes();   
                        System.out.println("passou 3");   
                        Attribute attr = attributes.get("cn"); //Recuperando o CommonName do grupo   
                        System.out.println("passou 4");                
                        System.out.println(attr.get());   
                }                   

                ctx.close(); 

E meu security_principal esta assim:

            env.put(Context.SECURITY_PRINCIPAL, usuario + "@microquimica.int"); 
            env.put(Context.SECURITY_CREDENTIALS, senha);