[quote=IgorFranco]Boa tarde amigos,
Tenho uma aplicação que possui uma funcionalidade de troca de senha, onde troca a senha do LDAP com JNDI, mas está apresentando o erro abaixo quando tento trocar a senha.
Erro:
AlteraSenhaPortlet.changePassword: javax.naming.NameNotFoundException: object does not exist
Método:
public void changePassword(String uid, String newPasswd) throws NamingException {
logger.debug("Iniciando o método changePassword ...");
System.out.println("newPasswd: " + newPasswd);
BasicAttributes attrs = new BasicAttributes("userpassword", newPasswd);
String name = "uid=" + uid + "," + base;
logger.debug("LDAP URL=[" + ldapURL + "], ldapUser=[" + ldapUser + "]");
logger.debug("uid=[" + uid + "], base=[" + base + "]");
logger.debug("name do changePassword: " + name);
logger.debug("DirContext.REPLACE_ATTRIBUTE : " + DirContext.REPLACE_ATTRIBUTE);
logger.debug("attrs : " + attrs);
ctx.modifyAttributes(name, DirContext.REPLACE_ATTRIBUTE, attrs);
logger.debug("Finalizando o método changePassword ...");
}
Todos os atributos estão chegando na classe corretamente, porém de este erro. Alguém tem aguma opinião?
Obrigado
Vlw
[/quote]
Utilizei o método alterarAtributo para alterar a senha e o médoto hashMD5Password para encriptar a senha com md5. Segue os métodos abaixo.
alterarAtributoLdap("cnDoUsuario", "userPassword", ldap.hashMD5Password("novaSenhaDoUsuario"));
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;import com.sun.org.apache.xml.internal.security.utils.Base64;
public String hashMD5Password(String password) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(password.getBytes("UTF8"));
String md5Password = Base64.encode(digest.digest());
return "{MD5}" + md5Password;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
public boolean alterarAtributoLdap(String cn, String atributo, String valor) {
Hashtable env = new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.PROVIDER_URL, "ldap://ldap.uerr.lan:389" );
env.put( Context.SECURITY_AUTHENTICATION, "simple" );
env.put( Context.SECURITY_PRINCIPAL, "cn=suporte,dc=uerr,dc=edu,dc=br" );
env.put( Context.SECURITY_CREDENTIALS, "root@dvt1245" );
try {
DirContext dico = new InitialDirContext( env );
ModificationItem[] moit = { new ModificationItem( DirContext.REPLACE_ATTRIBUTE, new BasicAttribute( atributo, valor ) ) };
dico.modifyAttributes( "cn="+ cn + ",ou=People,dc=uerr,dc=edu,dc=br", moit );
dico.close();
return true;
} catch ( Exception ae ) {
ae.printStackTrace();
}
return false;
}