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.