[RESOLVIDO] Setar senha com MD5 no JSF

8 respostas
T

Oi pessoal,

preciso gravar a senha de uma entidade com criptografia. A função é esta:
public class TransformaStringMD5 {

	// Função para criar hash da senha informada
	public static String md5(String senha) {
		String sen = "";
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
		sen = hash.toString(16);
		return sen;
	}
O meu MB:
public String save(){
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 

		dao.save(this.pessoaFisica);

		this.pessoaFisica = new PessoaFisica(); 
		return "cadastraSucesso";
	}
A visão:
<h:outputLabel for="password" value="* Senha " />
<h:inputSecret id="password" validatorMessage="A senha deve ter no mínimo 6 caracteres!" value="#{pessoaFisicaFace.pessoaFisica.userLogin.password}" >
	<f:validateLength minimum="6"/>
</h:inputSecret>

Assim tá gravando do jeito que o usuário digita. Preciso fazer uma chamada parecida com essa:

value="#{TransformaStringMD5.md5(pessoaFisicaFace.pessoaFisica.userLogin.password)}"

Sei que não é assim. Como eu faço em JSF?

Obrigada!

8 Respostas

F

Acho que a solução mais simples é você codificar a senha para MD5 antes de persisti-lo, ao invés de direto no inputSecret, na verdade acho que dessa forma que você postou não funcione mesmo. tente dessa forma:

//algo do tipo
  pessoaFisica.setPassword(TransformaStringMD5.md5(pessoaFisica.getPassword));
  dao.save(pessoaFisica);
L

tati.mat.moreira,

Voce pode montar a sua aplicação da seguinte forma:

  • no momento de salvar a sua entidade no banco de dados, no seu backing bean realize a encriptação da senha pegando o valor que o usuário digitou na tela;
  • se sua aplicação tiver módulo de edição, nao mostre a senha inteira dentro do campo, mostre alguma máscara ou algo do tipo apenas para nao apresentar o campo vazio, caso o usuário opte por trocar a senha, aí no seu backing bean vc gera a encriptação da nova senha, se ele nao trocar, use a mesma senha que vc tem(vc pode armazená-la num field hidden, por exemplo)…

nao sei c expliquei bem, mas eh isso q te aconselho!

qlq dúvida posta aí que tentamos ajudar! :smiley:

T
leonickel:
tati.mat.moreira,

Voce pode montar a sua aplicação da seguinte forma:

- no momento de salvar a sua entidade no banco de dados, no seu backing bean realize a encriptação da senha pegando o valor que o usuário digitou na tela;
- se sua aplicação tiver módulo de edição, nao mostre a senha inteira dentro do campo, mostre alguma máscara ou algo do tipo apenas para nao apresentar o campo vazio, caso o usuário opte por trocar a senha, aí no seu backing bean vc gera a encriptação da nova senha, se ele nao trocar, use a mesma senha que vc tem(vc pode armazená-la num field hidden, por exemplo).......

nao sei c expliquei bem, mas eh isso q te aconselho!

qlq dúvida posta aí que tentamos ajudar! :D

Você diz aqui:
public String save(){
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 

		dao.save(this.pessoaFisica);

		this.pessoaFisica = new PessoaFisica(); 
		return "cadastraSucesso";
	}
??? Como eu faço?
L
tati.mat.moreira:
Você diz aqui:
public String save(){
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 

		dao.save(this.pessoaFisica);

		this.pessoaFisica = new PessoaFisica(); 
		return "cadastraSucesso";
	}
??? Como eu faço?

Nesse seu trecho de código eu alteraria a sequência das chamadas e adicionaria a chamada para encriptação da senha ficando mais ou menos assim:

public String save(){
		this.pessoaFisica = new PessoaFisica(); 
        this.pessoaFisica.setPassword(TransformaStringMD5.md5(this.password));
        this.pessoaFisica.set.........(outras setagens que vc precise fazer)
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 
		dao.save(this.pessoaFisica);
		return "cadastraSucesso";
	}

Se ainda está com dúvidas, posta aí seu backing bean inteiro que a gente ajuda :D

T

Aeee... deu certo.

Só alterei meu MB:
public String save(){
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 

		UserLogin user = new UserLogin(); 
		
		user.setPassword(TransformaStringMD5.md5(this.pessoaFisica.getUserLogin().getPassword()));
		user.setLoginEmail(this.pessoaFisica.getUserLogin().getLoginEmail());
		
		System.out.println("<<< >>>>> " + this.pessoaFisica.getUserLogin().getPassword());
				
		this.pessoaFisica.setUserLogin(user);
		
		user.setPessoaFisica(pessoaFisica);
				
		dao.save(this.pessoaFisica);

		this.pessoaFisica = new PessoaFisica(); 
		return "cadastraSucesso";
	}

Agradeço a todos que ajudaram! :wink:

Bjoss...

A

Pessoal,

Preciso que a senha do sistema seja criptografada, mas estou com a seguinte duvida:

Como eu faço para comparar a senha no momento do login se a mesma está criptografada?
ex: cadastrei usuario com a senha 123, a mesma virou zyx no banco de dados. Quando o usuario faz o login o sistema deve comprar se a senha digitada é igual a que está no banco de dados, mas no banco está diferente, pois foi criptograda.

Utilizo o firebird.

S

Você irá criptografar a senha no momento do login e então comparar com a do banco pois o algoritmo do MD5 sempre gera a mesma criptografia.

A

Entendi!

Obrigado silvaesouza!

Criado 6 de fevereiro de 2009
Ultima resposta 29 de dez. de 2009
Respostas 8
Participantes 5