EncriptarMD5 + Spring Security

12 respostas
juniorsatanas

Pessoal eu uso o Spring Security para pega meu login e senha: a senha estão criptografadas:

<authentication-manager>
        <authentication-provider>
            <!--<password-encoder hash="md5" />-->
            <jdbc-user-service data-source-ref="dataSource"

                 users-by-username-query="SELECT users.username,users.password,'true' AS enabled FROM financeiro2.users WHERE users.username=?"
                 authorities-by-username-query="SELECT authorities.username,authorities.autority FROM financeiro2.authorities WHERE authorities.username=?"/>

        </authentication-provider>
    </authentication-manager>
package ce.gov.nutec.util;

import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.authentication.encoding.PasswordEncoder;

public class EncriptarMD5 {

    public static String encriptar(String senha) {
        PasswordEncoder encoder = new Md5PasswordEncoder();
        senha = encoder.encodePassword(senha, null);
        return senha;
    }

}

Como eu faço para na hora do cadastro ele criptografar essas senhas :?

Como ficaria meus Daos meu Controles e minhas Entidades ?

Abraço

JR.

12 Respostas

Lucas_Cavalcanti

só antes do save vc usar essa sua classe…

ou melhor, no setPassword ou no setSenha da classe Usuario/User vc já fazer isso

juniorsatanas

Lucas não saquei !

Pode da uma exemplo ?

jr.

doravan

Conselho, md5 é velharia e bastante fácil de descriptografar.

Eu utilizo SHA-1 por conta da complexidade. Eu utilizo uma base de 64 bits para criptografia sha-1.
md5 é muito fácil de decriptar.

Eu utilizo assim:

public class StringUtils {
	/**
	 * Codificador de Senhas!
	 * @param senha
	 * @return senha
	 */
	public static String encode(String senha){
		try
		{
			MessageDigest messageDiegest = MessageDigest.getInstance("SHA-1");
			messageDiegest.update(senha.getBytes("UTF-8"));
			return Base64.encodeToString(messageDiegest.digest(), false);
		}
		catch (NoSuchAlgorithmException e)
		{
			throw new Error(e);
		}
		catch (UnsupportedEncodingException e)
		{
			throw new Error(e);
		}
		
	}

e no controlador:

@Path("/login")
	public void login(Usuario usuario){
		if (usuario.getEmail().length() == 0)
			validar("É necessário informar seu email.");
		if (usuario.getSenha().length() == 0)
			validar("É necessário informar sua senha.");
		
		validator.onErrorForwardTo(IndexController.class).index();
		
		String senha = usuario.getSenha();
		usuario.setSenha(StringUtils.encode(senha));
		Usuario tologin = usuarioDao.login(usuario);
		
		if (tologin == null)
			validar("Senha inválida!");
		validator.onErrorForwardTo(IndexController.class).index();
		usuarioHandler.login(tologin);
		result.redirectTo("/");
	}
G

doravan, cuidado ao lançar Error. Você nunca deve lançar Error, mas sim Exception. Error (e suas filhas) são utlizadas pela VM para indicar quando você não pode mais se recuperar do erro, por exemplo, VirtualMachineError.

Lucas_Cavalcanti

nesse caso, em que essas exceptions nunca deveriam acontecer pq esses algoritmos e encoding existem, dê throw new AssertionError(e)

doravan

Vlw

juniorsatanas

Como fica no Spring Security ?

Obrigado a todos pela ajuda !

jr

Lucas_Cavalcanti

tanto faz pro Spring Security, o MD5 (ou SHA-1) só vai ser necessário pra salvar/buscar usuários do banco

juniorsatanas

Pensei que tinha que fazer algo mais !

Obrigado Lucas…

juniorsatanas
package br.com.catequese.util;

import com.lowagie.text.pdf.codec.Base64;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

    public class StringUtils {
        /**
         * Codificador de Senhas!
         * @param senha
         * @return senha
         */
        public static String encode(String senha) throws UnsupportedEncodingException{
            try
            {
               MessageDigest messageDiegest = MessageDigest.getInstance("SHA-1");
               messageDiegest.update(senha.getBytes("UTF-8"));
               return Base64.encodeToString(messageDiegest.digest(), false);  ************************************ta dando erro aqui
           }
           catch (NoSuchAlgorithmException e)
           {
               throw new Error(e);
           }
           catch (UnsupportedEncodingException e)
           {
               throw new Error(e);
           }

       }
    }
library-inclusion-in-manifest: Created dir: /home/agonia/sigi/build/empty Compiling 120 source files to /home/agonia/sigi/build/web/WEB-INF/classes /home/agonia/sigi/src/br/com/catequese/util/StringUtils.java:19: cannot find symbol symbol : method encodeToString(byte[],boolean) location: class com.lowagie.text.pdf.codec.Base64 return Base64.encodeToString(messageDiegest.digest(), false); Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 1 error /home/agonia/sigi/nbproject/build-impl.xml:412: The following error occurred while executing this line: /home/agonia/sigi/nbproject/build-impl.xml:231: Compile failed; see the compiler error output for details. FALHA NA CONSTRUÇÃO (tempo total: 1 segundo)

Teria ideia do que ta errado ?

Lucas_Cavalcanti

o Base64 está importado do lugar errado, tente importar o do javax.net ou coisa do tipo

juniorsatanas

Lucas Obrigado Cara !

Criado 6 de dezembro de 2010
Ultima resposta 5 de mai. de 2011
Respostas 12
Participantes 4