Olá Pessoal!
Eu tenho uma caso parecido, eu consigo logar com os dados da conexão, pois testei os dados usando a ferramenta LdapExplorerTool e com os dados da conexão visualizo a hierarquia. Meu problema é que se tento logar com algum usuário de acesso do sistema ele não acha esse usuário que tenta logar. Se eu colocar o correto do usuário que ta logando ai funciona. Exemplo:
Tenho no Ldap meu root como “ou=principal”, dentro da principal tenho outras “ou”: “ou=nivel1” e “ou=nivel2”. Quando entro como administrador na “OU” principal funciona mas quando tento entrar com um “CN” de outros niveis exemplo “ou=nivel1” não consegue achar esse usuário. É como se ele não conseguisse percorrer a arvore de nós.
Pesquisando na web o pessoal usa nos exemplos para pesquisar o usuario algo assim:
@SuppressWarnings("unchecked")
public Usuario getUsuario(final String userName){
AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("objectclass", "person")).and(new EqualsFilter("sAMAccountName", userName));
Usuario user = new Usuario();
user.setUserName(userName);
SearchControls s = new SearchControls();
s.setSearchScope(SearchControls.SUBTREE_SCOPE);
try {
List<Usuario> users = getLdapTemplate().search(getDnFromUser(user,USUARIOS_OU), filter.encode(), s, new UsuarioContextMapper());
if (!users.isEmpty()) {
return users.get(0);
}
// Se um usuario inexiste for repassado, e lancada uma excessao de NameNotFoundException. Nesse caso, retorna nulo, pois nao encontrou o usuario
} catch( NameNotFoundException e ) {
Logger.getLogger(ADService.class.getName()).log(Level.INFO, "Usuário inexistente - getUsuario: " + userName, e);
return null;
}
return null;
}
O SearchControls.SUBTREE_SCOPE pelo que vi é era para percorrer a arvore dos nós abaixo da principal.
Alguem já passou por algo parecido?