Olá!
Estou utilizando spring security em uma aplicação e estou enfrentando o seguinte problema, quando crio alguma senha com acento não consigo logar no meu sistema.
Já estou salvando a senha em MD5 desta forma:
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(senha.getBytes(),0, senha.length());
senhaMD5= new BigInteger(1,messageDigest.digest()).toString(16);
if (senhaMD5.length() < 32) {
senhaMD5= "0" + senhaMD5;
}
e minha configuração no spring é:
<security:password-encoder hash="md5"/>
Alguém tem alguma idéia?
Desde já agradeço =]
Acho que o problema é aqui:
messageDigest.update(senha.getBytes(),0, senha.length());
Testa assim:
byte[] bytesSenha = senha.getBytes();
messageDigest.update(bytesSenha);
String senhaMD5 = new String(messageDigest.digest());
Olá Isjunior, obrigado pela resposta, mas ainda não resolveu foi gerado alguns caracteres estranhos da forma que vc sugeriu.
Vc tem que aplicar o base64 ou hex para deixar de acordo com o que vc precisa.
Olá Pessoal!
Na verdade o problema me parece ser de encoding, ou seja, no form de login do spring está bagunçando a acentuação.
Alguém tem alguma idéia?
Foi o que eu disse, vc além de aplicar o MD5 vc precisa aplicar base64 ou hex nos bytes.
Olá!
Então na verdade fiz uns testes e percebi quando o username está com acento não é possível logar, então acho que não é problema na geração do MD5.
Já coloquei um filtro no meu web.xml que seta o encoding para UTF-8.
Alguém tem alguma idéia?
Olha lá na documentação deles:
http://static.springsource.org/spring-security/site/docs/3.2.x/reference/ns-config.html#ns-password-encoder
Por padrão é aplicado o base64 na senha.
<security:password-encoder base64="true" hash="md5">
Então para obter a senha dessa forma tem que fazer isso:
[code]import java.security.MessageDigest;
import sun.misc.BASE64Encoder;
public class SenhaTest {
public static void main(String[] args) {
try {
String senha = "SenhaMuitoComplicada";
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(senha.getBytes());
byte[] md5 = messageDigest.digest();
String base64 = new BASE64Encoder().encode(md5);
System.out.println("Senha : " + senha);
System.out.println("Senha(MD5: " + base64);
} catch (Exception e) {
e.printStackTrace();
}
}
}[/code]
Sobre o encoding vc pode ajustar na página, no servidor e no sistema operacional.Vale a pensa criar um JSP com um campo de texto para verificar se está realmente com problema de charset. É bem mais facil testar e arumar.
[code]<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%
String text = request.getParameter(“text”);
%>
[/code]