Validar login usando Criteria

5 respostas
J

Pessoal,

Estou usando Struts 1.3 com Hibernate e estou precisando verificar o login e a senha do cara num action do struts, usando o criteria do hibernate, mas não estou sabendo como fazer.
Estou querendo que meu metodo verifique, através de criteria, no BD, o login e a senha passados como parametros, depois da verificação que me retonasse true ou false, algo assim, acho que isso me ajudaria depois no action do struts. Se algume puder me ajudar ou tiver uma ideia, agradeço.

Tenho esse método aqui:
public String ValidarUsuario(String login, String senha) {
        Criteria c = session.createCriteria(Usuario.class);
        Criterion _login = Restrictions.eq("login", login);
        c.add(_login);
        Criterion _senha = Restrictions.eq("senha", senha);
        c.add(_senha);
	//c.add(Restrictions.ilike("senha", senha + "%"));

	return (String) c.uniqueResult();
    }
Nao sei se só ele basta e tenho que usar algum tipo de if no action do struts ou tenho que modificar esse metodo, talvez ele me retornando um boolean ficaria melhor. Espero que tenha sido claro.

5 Respostas

Alexandre_Saudate

Tente assim:

//Retorna true se o usuário e senha estão OK, caso contrário, false
public boolean ValidarUsuario(String login, String senha) {
        Criteria c = session.createCriteria(Usuario.class);
        Criterion _login = Restrictions.eq("login", login);
        c.add(_login);
        Criterion _senha = Restrictions.eq("senha", senha);
        c.add(_senha);	

	return c.uniqueResult() != null;
    }

[]´s

J

Valeu pela juda.

Declarei o método que me passou na minha classe UsuarioDAO, sem nenhum alteração, ficando assim:

public boolean ValidarUsuario(String login, String senha) {
        Criteria c = session.createCriteria(Usuario.class);
        Criterion _login = Restrictions.eq("login", login);  
        c.add(_login);  
        Criterion _senha = Restrictions.eq("senha", senha);  
        c.add(_senha);    

        return c.uniqueResult() != null;
    }

Na minha ação do struts, fiz assim:

LoginForm loginForm = (LoginForm) form;
        Usuario usuario = new Usuario();
        BeanUtils.copyProperties(usuario, loginForm);
        request.setAttribute("usuario", usuario);

        Session sessao = HibernateUtil.getSession();

        UsuarioDAO dao = new UsuarioDAO(sessao, Usuario.class);

         try {
            dao.ValidarUsuario(loginForm.getLogin(), loginForm.getSenha());
            retorno = "logado";
            sessao.flush();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
            retorno = "erroUsuario";
        }
       return mapping.findForward(retorno);
        }

Mas não está funcionando do jeito que esperava, ou seja, se eu digitar um login e/ou uma senha errados ou certas acontece a mesma coisa.
O que pode ser?

zoren

É pq vc não trata o retorno do método q valida os usuários

se ele pode ou não fazer login no sistema, vai acontecer a mesma coisa, pq vc não capturou o retorno do seu método

em outras palavras, faltou um if

J

Eu tinha colocado um IF, mas continuou a mesma coisa, ae pra postar aqui no forum acabei tirando o if, talvez a minha logica estivesse errada, vou tentar aqui e posto de novo, se nao funcionar

Valeu pela ajuda.

J

Funcionou.

Se eu digito um login e senha errados, o struts redireciona para a tela de login, soh o javascript que parou de funcionar agora, mas isso eu me viro aqui.
Acho que minha logica ficou certa agora, fiz assim:

try
        {
          if (dao.ValidarUsuario(loginForm.getLogin(), loginForm.getSenha()))
          {
            retorno = "logado";
          }
          else
          {
            retorno = "erroLogin";
          }      
          sessao.flush();
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            retorno = "erroLogin";
        }

        return mapping.findForward(retorno);
Criado 23 de fevereiro de 2010
Ultima resposta 24 de fev. de 2010
Respostas 5
Participantes 3