Criptografando senha com Spring Security

Olá Pessoal,

No post 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 BD, e já sabemos o motivo de fazer isso. Não vou entrar nos detalhes.

Lets go

Requisitos

  • Baixe a versão mais recente do SpringSecurity. (Para o post estou usando a versão 3.2.x)

Starting

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 1 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);

       } 

}

 

 Simples, não? Se quiser ver o código hash basta imprimir no console.

Abraços, vou ficando por aqui.