Validar usuario e senha

16 respostas
J

Boa noite, estou com um problema que é simples, mas pra mim ta um pouco foda, pois nao estou conseguindo resolver.

Estou desenvolvendo um aplicativo web java, e imagine que tenho que pega dois valores do formulario (PAGINA.JSP), um é o nome de usuario, e o outro é a senha, e depois comparar com as duas colunas de uma tabela de um BD para confirmar se é usuario cadastrado ou nao.

Eu criei uma classe chamada Usuario.java, e um metodo dentro dela que é para realizar a comparação, usei um select.

O problema é: COMO EU PEGO OS VALORES DA PAGINA.JSP E COMPARO COM OS VALORES DA COLUNA DA TABELA?

vou passar oque fiz ate agora, a pagina jsp e o metodo da classe(está constando erro)

try
        {
        ResultSet usu, sen ;

	String user  = request.getParameter("user").toUpperCase();
	String pass  = request.getParameter("password").toUpperCase();

	conexao.conectar();
	usuario.setConexao(conexao.getConexao());
        usu = usuario.verificaLogin(user);
        sen = usuario.verificaSenha(pass);

        if((usu.equals(true)) && (usu != null))
            if((sen.equals(true)) && (sen != null))
            out.println("<p><a href=\"loja.jsp" + "\">Entre na loja</a></p>");
        else
            out.println("<p>Senha vazia ou incorreta</p>");

        else
            out.println("<p>Usuario vazio ou incorreto.</p>");
            
        }
    catch(Exception e)
        {
            e.printStackTrace();
        }
public boolean verificaLogin(String user)
        { // CONSTA ERRO NESTA LINHA (MISSING RETURN STATEMENT)
          String usuario = null;

            try
            {
                ps = (PreparedStatement) con.prepareStatement("SELECT login FROM "
                        + "usuario WHERE login = '"+user+"' ");
                rs = ps.executeQuery();
                while(rs.next())
                {
                    usuario = rs.getString("login");
                }
                if(user.equals(usuario))
                     return true;
                else
                    JOptionPane.showMessageDialog(null, "Usuario incorreto");
                return false;

            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
         }

        public ResultSet verificaSenha(String pass)
        {
           String senha = null;

            try
            {
                ps = (PreparedStatement) con.prepareStatement("SELECT senha FROM usuario WHERE senha = '"+pass+"' ");
                rs = ps.executeQuery();
                while(rs.next())
                {
                    senha = rs.getString("login");
                }
                if(pass.equals(senha))
                {
                     return rs;
                }
                else
                {
                   JOptionPane.showMessageDialog(null, "Usuario incorreto");
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();

            }
         }

16 Respostas

J

Rapaziada, da uma força ai, é projeto pra faculdade e realmente nao estou conseguindo entender.

Obrigado.

T

opA!

te aconselho a utilizar o vRaptor, tem bastante material e na totalidade em portugues assim ficando mais barbada de aprender se tiver dificuldades com linguas extrangeiras!!
http://vraptor.caelum.com.br/

ainda mais por se tratar de um trabalho de faculdade, vai precisar de um certo embasamento e certamente vai ter todo o material necessário a mão.

depois de dar uma passada no material e seguindo as apostilas com o curso de vraptor e surgir alguma dúvida posta aEW que o povo sintetiza a questão!

:wink:

J

Bom, sinceramente, eu creio que essa questao d evalidar login nao seja nada de mais, mas para o pessoal nao estar respondendo tem 2 alternativas, ou nao acham certo me mostrar como que faz por ser trabalho da faculdade (coisa que eu acho q nao tem nada a ver)m ou é realmente mt dificil (acho dificil ser essa questao.)

bom ams vo disponibilizar um novo codigo que eu fiz para o tratado, melhrou, agor apelo menos mostra a msg de erro e o codigo ficou mais limpo.
<%
Usuario us = new Usuario();
String login = request.getParameter("login");
String  senha = request.getParameter("senha");

conexao.conectar();
us.setConexao(conexao.getConexao());

boolean result = us.verificaUsuario(login, senha);
    
if(result == true)
{
        out.println("<br />Login feito com sucesso" + us.nome);
}
else
{
	out.println("<br />login ou senha invalidos");
}
        conexao.fechar();
%>
public String nome = null;
        public Boolean result = false;

public boolean verificaUsuario(String login, String senha)
{
    String sql = null;

//instrução SQL
sql = "select nome from usuario where login = '"+login+"' and senha = '"+senha+"' ";

try
{
ps = (PreparedStatement) con.createStatement();
rs = ps.executeQuery(sql);

if(rs.next())
{
result = true;
nome = rs.getString("nome");
}
 else{
    System.out.println("Não foi autenticado.");
    }
}catch(Exception e)
{
    e.printStackTrace();
}
return result;
}
S

Estou começando a programar pra web agora mas este tipo de lógica é a mesma em qualquer lugar.

No desktop eu faço assim:

  1. Tenho uma tabela no banco de dados chamada de usuário, e nela tenho os campos login e senha;
  2. faço uma consulta ao bando de dados para conferir se com aquele login e senha digitada retorna algum dado ao select.
  3. se retornar é por que está certo, se não retornar nada é por que ou o login ou a senha estão errados…

Sandro

J

Sandro obrigado pela ajuda, realmente vc tem razao a logica é a mesma, mas como eu sou novo em desenvolvimento web java (2 semanas), estou encontrando essa dificuldade, pois fiz td da maneirta correta, o select etc., mas mesmo assim nao retorna o resultado positivo, nao estou conseguiondo encontrar o erro.

Grato.

S

Parece boba a pergunta que vou fazer, mas existe no seu banco a tabela Usuario com nome, login e senha? Me perdoe pelo óbvio…

J

hahaha existe sim Sandro, nao tem nd de mais perguntar!

Grato.

S
no desktop eu faço isso: (fazendo pesquisa ao banco com os dados digitados:)
public ResultSet getConfereLogin(String emailChave, String senha) throws SQLException {

        String sql = "SELECT " +
                "usuarios.emailChave, " +
                "usuarios.senha " +
                "FROM " +
                "usuarios " +
                "Where emailChave = ? and senha = ? ";

        java.sql.PreparedStatement stmt = this.conexao.prepareStatement(sql);
        stmt.setString(1, emailChave);
        stmt.setString(2, senha);
        ResultSet rs = stmt.executeQuery();

        return rs;
    }
S
e agora conferindo pra ver se retornou algo (no formulario de login)
UsuariosDao dao;
        dao = new UsuariosDao();
        ResultSet confereLogin = dao.getConfereLogin(jTFEmailParaLogin.getText(), senhaparaconsulta);

        if (confereLogin.next()) { //se tem um primeiro é por que o login ta certo!

           //exibe mensagem de saudação 

        } else {
            //exibe mensagem de erro
        }
W

Ele ta retornando alguma exception? O que está ocorrendo quando vc tenta logar?

S

Jow66,

Cara fiz um teste aqui no meu aplicativo desktop usando sua lógica e deu certo!
não sei por que ai nao dá...

criei o metodo abaixo pra fazer a consulta:
public boolean getConfereLoginBoolean(String emailChave, String senha) throws SQLException {

        String sql = "SELECT " +
                "usuarios.nomeUsuario, " +
                "usuarios.emailChave, " +
                "usuarios.senha " +
                "FROM " +
                "usuarios " +
                "Where emailChave = ? and senha = ? ";

        java.sql.PreparedStatement stmt = this.conexao.prepareStatement(sql);
        stmt.setString(1, emailChave);
        stmt.setString(2, senha);
        ResultSet rs = stmt.executeQuery();

        if(rs.next())
{
result = true;
nome = rs.getString("nomeUsuario");
}
else{
    System.out.println("Não foi autenticado.");
    }

return result;
}
e utilizei-o assim:
UsuariosDao dao;
        dao = new UsuariosDao();
        ResultSet confereLogin = dao.getConfereLogin(jTFEmailParaLogin.getText(), senhaparaconsulta);

        ///////////////////////////////
        boolean result = dao.getConfereLoginBoolean(jTFEmailParaLogin.getText(), senhaparaconsulta);

if(result == true)
{
        System.out.println("Login feito com sucesso" + dao.nome);
}
else
{
    System.out.println("login ou senha invalidos");
}

O resultado foi:

Login feito com sucesso: SANDRO

J

Amigos fico grato pela ajuda que vcs estao dando.

Mas eu alterei todo o codigo de boolean para ResultSet porque nao estava dando certo, e vou postar para vcs verem, ele esta mais simples, logico e facil de visualizar, e ainda nao consegui, vou postar em detalhes.

METODO DA CLASSE USUARIO RESPONSAVEL POR VALIDAR O USUARIO

public boolean verificaUsuario(String login, String senha) throws SQLException
{

try{

stmt = (PreparedStatement) con.prepareStatement("select nome from usuario where login = '"+login+"' and senha = '"+senha+"' ");
rs = stmt.executeQuery();

if(rs.next())
{
nome = rs.getString("nome");
return true;
}
 else
    return false;
}
catch(Exception e)
{
    e.printStackTrace();
    return false;
}

}

PAGINA QUE RECEBE OS DADOS DIGITADOS E POSTERIORMENTE CHAMA O METODO DA CLASSE USUARIO PARA TESTAR A VALIDAÇÃO

String login = request.getParameter("login");
String senha = request.getParameter("senha");

conexao.conectar();
usuario.setConexao(conexao.getConexao());

boolean rs = usuario.verificaUsuario(login, senha);

out.println("Antes do if"); //ESSA MSG DE TESTE E EXIBIDA

if(rs == true){
    out.println("dentro do if");//NAO CONSIGO EXIBIR ESSA MSG DE TESTE

        out.println("<br />Login feito com sucesso" + usuario.nome);
        }
else{
        out.println("dentro else");//ESSAS DUAS MSG DE TESTE TB SAO EXIBIDAS
	out.println("<br />Login ou senha invalidos");

}

Reparem que deixei comentarios no codigo explicando as msg que sao exibidas na tela.

Existe alguma classe, biblioteca que é necessario importar?

Grato.

S

só pra testar, modificque sue metodo de pesquisa assim:

public boolean getConfereLoginBoolean(String login, String senha) throws SQLException {

        String sql = "select nome from usuario where login = ? and senha = ?";
        stmt.setString(1, login);
        stmt.setString(2, senha);
        rs = stmt.executeQuery(); 

if(rs.next())  
{  
nome = rs.getString("nome");  
return true;  
}  
else  
    return false;  
}  
catch(Exception e)  
{  
    e.printStackTrace();  
    return false;  
}  
  
}
J

Sandro, testei aqui e retornou a mesma msg, esquisito em!! Não é? Porque a logica pelo menos parece que está certa, teria como vc passar o seu e-mail para mim? Se fosse possivel eu te enviaria o projeto e vc tentava rodar na sua maquina, quem sabe da certo…

[]s

S

[email removido]

tô no trabalho agora, talves de noite dê tempo de testar!

não retorna nenhum exception não?

J

Problema Resolvido, tinha posto para o BD receber dados tudo em maiusculo, retirei e deu certo, agora so uma outra duvida como que faço para pegar o nome da tabela usuario e sempre ta mostrando ele na pagina, tipo: Bem vindo “campo ‘nome’ da tabela”.

Grato.

Criado 21 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 16
Participantes 4