Olá, pessoal!
No artigo de hoje vamos ver como criptografar senha usando o Spring Security. O objetivo é que a senha do usuário não seja salva no seu banco de dados, e já sabemos o motivo de fazer isso. Não vou entrar nos detalhes.
Requisitos
- Baixe a versão mais recente do SpringSecurity (para o post estou usando a versão 3.2.x);
Há várias soluções na internet, desde usando o Java puro ou usando APIs, frameworks para criptografar a senha, e para quem está usando o SpringSecurity no projeto tem uma vantagem: já tem uma classe implementada pelo pessoal do Spring que faz isso em uma linha. Vejamos a classe que criei a seguir para fazer isso. Vejam como é simples:
public abstract class GenerateHashPasswordUtil {
private static Object salt;
public static String generateHash(String password) {
MessageDigestPasswordEncoder digestPasswordEncoder = getInstanceMessageDisterPassword();
String encodePassword = digestPasswordEncoder.encodePassword(password, salt);
return encodePassword;
}
private static MessageDigestPasswordEncoder getInstanceMessageDisterPassword() {
//informo tipo de enconding que desejo
MessageDigestPasswordEncoder digestPasswordEncoder = new MessageDigestPasswordEncoder("MD5");
return digestPasswordEncoder;
}
//método que faz a validação como não usamos salt deixei em null
public static boolean isPasswordValid(String password, String hashPassword) {
MessageDigestPasswordEncoder digestPasswordEncoder = getInstanceMessageDisterPassword();
return digestPasswordEncoder.isPasswordValid(hashPassword, password, salt);
}
}
E aqui a classe de teste que valida alguns cenários:
public class GenerateHashPasswordUtilTest {
@Test
public void testHashWasGenerateWithSuccess() {
String password="1234";
assertNotNull(GenerateHashPasswordUtil.generateHash(password));
}
@Test
public void testValidIfPasswordIsValidAfterHashed(){
String password="brazil";
String hashPassword =GenerateHashPasswordUtil.generateHash(password);
boolean expectedValidPassword = GenerateHashPasswordUtil.isPasswordValid(password, hashPassword);
assertTrue(expectedValidPassword);
}
@Test
public void testPassWordIsNotEqualToHashCodeGenerated(){
String password = "XPto";
String passwordhash = GenerateHashPasswordUtil.generateHash(password);
String passwordTyped = "xPto";
boolean expectedInvalidPassword = GenerateHashPasswordUtil.isPasswordValid(passwordTyped, passwordhash);
assertFalse(expectedInvalidPassword);
}
}
Curtiu? Se quiser ver o código hash basta imprimir no console.
Abraços e vou ficando por aqui.



