[Resolvido]Problemas com autenticação de login

Bom tenho o seguinte problema com login de usuário no meu sistema: Tenho meu formulário para entrada do e-mail e senha e o botão login, só que esta acontecendo de sempre acusar login ou senha incorretos!!
Essa é aminha classe UsuarioLogin:

[code]package br.com.cad.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.cad.basica.Contato;

public class UsuarioLogin {
private Contato usuario;

public UsuarioLogin(Contato usr)
{
    usuario=usr;
}

    public boolean verificaLogin(){
    if(usuario.getEmail()!=null && usuario.getSenha()!=null)
    {
        try
        {
         ConnectDb con = new ConnectDb();
         String strsql="SELECT PF_EMAIL, PF_SENHA FROM DADOS_CADASTRO WHERE PF_EMAIL = ? and PF_SENHA = ?;";       
         PreparedStatement stmt = con.getConnection().prepareStatement(strsql);
         stmt.setString(1, usuario.getEmail());
         stmt.setString(2, usuario.getSenha());
         ResultSet rs=stmt.executeQuery();
         if(rs.next()) //Existe o usuário no banco de dados
         {
               rs.close();
               stmt.close();
               return true;
         } // Não existe o usuário
         rs.close();
         stmt.close();
         return false;
        }
        catch (SQLException e) 
    {
        	return false;
        }

    }
    return false;

}}
[/code]

E tenho também a minha Servlet :

[code]package br.com.cad.servlet;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.cad.basica.Contato;
import br.com.cad.dao.UsuarioLogin;

public class LoginAuthentication extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 1L;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {

    } finally {            
        out.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String email=request.getParameter("email");
    String senha=request.getParameter("password");
    RequestDispatcher rd = null;
    Contato user = new Contato();
    user.setEmail(email);
    user.setSenha(senha);
    UsuarioLogin ul = new UsuarioLogin(user);
    if(ul.verificaLogin())
    {
        HttpSession sessao = request.getSession();
        sessao.setAttribute("USER",email);
        rd=request.getRequestDispatcher("logado.jsp");
        rd.forward(request,response);
    }
    else
    {
        request.setAttribute("msg", "Usuário ou senha inválidos");
        rd=request.getRequestDispatcher("login.jsp");
        rd.forward(request,response);
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request,response);
}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}
[/code]
O Que pode esta acontecendo visto que informo o email cadastrado e que esta no meu banco e sua devida senha???

Voce pode estar tendo erro e o catch de verificaLogin não está mostrando.
Coloque e.printStackTrace(); antes de retornar false…

O método next() de ResultSet retorna um boleano, então crie uma variável boleana e inicie com false, depois de instanciar o ResultSet atribua a variável à chamada do método pelo objeto.

Alexsandro Lopes,
Me perdi aqui como seria isso? Por favor poderia me da um exemplo de como poderia fazer-lo?

No método verificaLogin da classe UsuarioLogin:

crie uma variável boleana e inicialize com false;
ex: boolean logado = false;
substitua este trecho de código:

if(rs.next()) //Existe o usuário no banco de dados  
             {  
                   rs.close();  
                   stmt.close();  
                   return true;  
             } // Não existe o usuário  

por este:

logado = rs.next(); e depois retorne a variável.

Ficou assim meu código, porém não funcionou: continua acusando usuario ou login inválido e o e.printStackTrace(); não faz o trace dos erros;

package br.com.cad.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.cad.basica.Contato;

public class UsuarioLogin {
private Contato usuario;
    
    public UsuarioLogin(Contato usr)
    {
        usuario=usr;
    }
    
        public boolean verificaLogin(){
        	
        if(usuario.getEmail()!=null && usuario.getSenha()!=null)
        {
            try
            {
             ConnectDb con = new ConnectDb();
             String strsql="SELECT PF_EMAIL, PF_SENHA FROM DADOS_CADASTRO WHERE PF_EMAIL = ? and PF_SENHA = ?;";       
             PreparedStatement stmt = con.getConnection().prepareStatement(strsql);
             stmt.setString(1, usuario.getEmail());
             stmt.setString(2, usuario.getSenha());
             boolean logado = false;
             ResultSet rs=stmt.executeQuery();
             
              
             
             rs.close();
             stmt.close();
             return  logado;
            }
            catch (SQLException e) 
            
        {  
            	e.printStackTrace(); 
            	return false;
            }

        }
        return false;

}}

Você tem certeza que fez a mudança corretamente?

leia a última mensagem com atenção e analise o código que você postou!

Bom eu refiz da seguinte maneira veja porém não entendo o que há?

[code]boolean logado = false;
ResultSet rs=stmt.executeQuery();

         while(rs.next()){
           logado=true; //a valid record was found so return true
         }
         rs.close();
         stmt.close();
         return logado;
                
         
         }
        catch (SQLException e) 
        
        {  
        	e.printStackTrace(); 
        	
        }

    }
    return false;

}}
[/code]

OK Eu fiz da seguinte maneira acho que estamos avançando:

[code]package br.com.cad.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.cad.basica.Contato;

public class UsuarioLogin {
private Contato usuario;

public UsuarioLogin(Contato usr)
{
    usuario=usr;
}

    public boolean verificaLogin(){
    	
    if(usuario.getEmail()!=null && usuario.getSenha()!=null)
    {
        try
        {
         ConnectDb con = new ConnectDb();
         String strsql="SELECT PF_EMAIL, PF_SENHA FROM DADOS_CADASTRO WHERE PF_EMAIL = ? and PF_SENHA = ?;";       
         PreparedStatement stmt = con.getConnection().prepareStatement(strsql);
         stmt.setString(1, usuario.getEmail());
         stmt.setString(2, usuario.getSenha());
         boolean logado = false;
         ResultSet rs=stmt.executeQuery();
         
         while(rs.next()){
           logado=true; //a valid record was found so return true
         }
         rs.close();
         stmt.close();
         return logado;
                
         
         }
        catch (SQLException e) 
        
        {  
        	e.printStackTrace(); 
        	
        }

    }
    return true;

}}
[/code]
Porém se coloco um email e senha valido ele da o bem vindo email informado, porém se não coloco nada e faço o login ele loga e da bem vindo null.

Bom resolvi fazer uma modificação em meu código, porém continuo com erros.

Aqui minha Classe Conexão com o Banco Mysql:

[code]package br.com.cad.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectDb {

public Connection getConnection() {  
    try {  
        System.out.println("Connect to database...");  
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/soa", "root", "wey123");  
    } catch(SQLException sqlException) {  
        throw new RuntimeException(sqlException);  
    }  
} 

}
[/code]

Agora Criei a Classe ConnectLogin:(Acredito que aqui está meu erro, seria o certo eu fazer um extends da minha Classe acima?

[code]package br.com.cad.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.cad.basica.Contato;
import br.com.cad.dao.ConnectDb;

public class ConnectLogin extends ConnectDb {

public Contato getContato( String email, String senha ){
	
    Connection c = this.getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try{
    	
    	
        ps = c.prepareStatement("select pf_email, pf_nome, pf_senha from dados_cadastro where pf_email = ? and pf_senha = ?");
        ps.setString(1, email);
        ps.setString(2, senha);

        rs = ps.executeQuery();

        if ( rs.next() ){
            Contato user = new Contato();
            user.setEmail(email);
            user.setSenha(senha);
            user.setNome( rs.getString("pf_nome") );

            return user;
        }
    }
    catch (SQLException e){
        e.printStackTrace();
    }
    finally{
        if (rs != null ) {
            try { rs.close(); } catch (SQLException e) { ; }
            rs = null;
        }
        if (ps != null ) {
            try { ps.close(); } catch (SQLException e) { ; }
            ps = null;
        }
        if (c != null ) {
            try { c.close(); } catch (SQLException e) { ; }
            c = null;
        }
    }
    return null;
}

}
[/code]
Minha Servlet:

[code]package br.com.cad.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import br.com.cad.dao.ConnectLogin;
import br.com.cad.basica.Contato;

public class ServletValidaLogin extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException, IOException{

    HttpSession session = request.getSession(); 
    Contato user = null;
    String email = request.getParameter("email"); 
    String senha = request.getParameter("password"); 

    try {
        ConnectLogin dao = new ConnectLogin(); 
        user = dao.getContato(email, senha);
    }
    catch ( Exception e ){

    }

    
    if ( user == null ) {
        session.invalidate();
        request.setAttribute("msg", "Usuário ou senha inválidos");
        request.getRequestDispatcher("login.jsp" ).forward(request, response);
    }
    else{
        
        session.setAttribute("user", user);
        request.getRequestDispatcher("home.jsp" ).forward(request, response);
    }

}

}[/code]

Meu WebXML:

<servlet> <servlet-name>processaLogin</servlet-name> <servlet-class> br.com.cad.servlet.ServletValidaLogin </servlet-class> </servlet> <servlet-mapping> <servlet-name>processaLogin</servlet-name> <url-pattern> /validaLogin.do </url-pattern> </servlet-mapping>
No console do eclipse aparece somente a mensagem Connect to database… creio que seja a mensagem da minha Classe ConnectDb.
Já quando eu insiro o email e a senha que estao armazenados no banco nada minha url fica como localhost… /validaLogin.do e é a mesma tela de login e abaixo informado que usuario e senha inválidos! O que pode está errado?