[RESOLVIDO] Erro ao validar usuário

5 respostas
cle.darsie

Ola pessoal,

Estou com um erro que está me matando de raiva.
Tenho uma tela de login em JSP, e não estou conseguindo fazer a validação do usuário para ter acesso.

Ele sempre sai da condição que impus pra validar e retorna a mensagem de usuário e senha inválidos.

Segue código JSP:
<%@page import="java.sql.Connection"%>
<%@page import="br.com.weblibrary.utils.DBUtils"%>
<%@page import="br.com.weblibrary.dao.LoginDAO"%>
<%@page import="br.com.weblibrary.dto.LoginDTO"%>

<%
	String txtUser = request.getParameter("txtUser");
	if (txtUser == null)
		txtUser = "";
	
	String txtPass = request.getParameter("txtPass");
	if (txtPass == null)
		txtPass = "";
	
	String btnAut = request.getParameter("btnAut");
	if (btnAut != null){
		Connection con = DBUtils.getConnection();
		LoginDAO dao = new LoginDAO(con);
		
		int result = dao.check(txtUser, txtPass);
	
		if(result == 1) {
			response.sendRedirect("index.jsp");
		} else {
			out.println ("Login ou Senha inválidos");
		}
	}
%>
E segue abaixo meu DAO da classe Login:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.weblibrary.utils.DBUtils;

public class LoginDAO {
	private Connection con;
	
	public LoginDAO(Connection con) {
		this.con = con;
	}
	
	public int check(String user, String senha) {
		String sql = "SELECT user, senha from Users WHERE user like '%" + user
				+ "%'" + " and senha like '%" + senha + "%';";
		
		ResultSet rs = DBUtils.executeQuery(con, sql);
		int result = 0;
		String user1 = "";
		String senha1 = "";
		String nome = "";
		String pass = "";
		try {
			if (rs.next()) {
				nome = rs.getString(1);
				pass = rs.getString(2);
				if (user1.equalsIgnoreCase(nome) && 
					senha1.equalsIgnoreCase(pass)) {
					result = 1;
				}
				return result;
			}
		} catch (SQLException ex) {
			Logger.getLogger(EstadosDAO.class.getName()).log(Level.SEVERE,
					null, ex);
		} finally {
			DBUtils.closeResultSet(rs);
		}
		return 0;
	}
}

Será que alguem consegue me ajudar com isso? Não consigo verificar o erro.

Obrigado.

5 Respostas

A

cara,

vc tem que usar = inves like, e toma cuidado qdo for fazer concatenação de variavel com sql, como vc ta fazendo.
de uma pesquisa no google sobre sql inject,

fica a dica.

t+

cle.darsie

Certo Alisson,
Vou dar uma estudada nisso ai. Valeu pela dica.
Mas como esse é só um aplicativo que to fazendo pra faculdade, acho que não precisa ser tão sofisticado.
Por isso que eu só queria que ele fizesse uma validação simples.

Este é o meio correto que estou fazendo?

A

cara,

use esse sql,

String sql = "SELECT user, senha from Users WHERE user = ? and senha = ?";

se essa query te retornar algum resultado é pq o usuario ta certo, caso nao retorne nada é pq esse usuario ou senha ta errado.

t+

cle.darsie
Valeu Alisson, Usei isso mas deu um erro. Consegui de outra forma, vi que tinha coisa errada no código, então corrigi e está rodando agora. Ficou assim a parte corrigida:
try {
			if(rs.next()) {
				nome = rs.getString(1);
				pass = rs.getString(2);
				
				if (nome.equals(user) && pass.equals(senha)) {
					result = 1;
					return result;
				} else {
					return result;
				}
			}

Mas obrigado pelas dicas, vou estudar esse sql injection q vc falou.

A

acho que vc nao entendeu o que eu falei,
o sql ja vai fazer a validação para vc, nao precisa vc fazer essa validação novamente como vc ta fazendo aqui,

try {  
            if(rs.next()) {  
                nome = rs.getString(1);  
                pass = rs.getString(2);  
                  
                if (nome.equals(user) && pass.equals(senha)) {  
                    result = 1;  
                    return result;  
                } else {  
                    return result;  
                }  
            }

se o sql retornar algum resultado é pq o usuario ja é valido, senao é pq nao existe.

t+

Criado 10 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 5
Participantes 2