Login

14 respostas
R

Boa noite pessoal,
é o seguinte tenho esse método de login que busca em uma tabela alunos e verifica se existe esse aluno ou não, só que no meu sistema eu tenho alunos e professores, os mesmos farão o login através deste método, então se ele não achar na tabela aluno ele deve procurar automaticamente na tabela professor,
lembrando que o login é através do e-mail, então não a possibilidade de ter o mesmo login nas duas tabelas,

esse é o código

public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
        men = null;
        sql = "SELECT email_aluno FROM aluno WHERE email_aluno =? AND senha_aluno = ?"; 
        
        bd.getConnection();
            try {
                
                PreparedStatement ps = bd.connection.prepareStatement(sql);
                ps.setString(1, x);//pega o login do formulario
                ps.setString(2, y);
                bd.rs = ps.executeQuery();//executa o sql
                if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não
                    ret = true;
                    men = (bd.rs.getString("email_aluno"));
                }
                else {
                    ret = false;
                    men = null;
                }
            } catch (SQLException erro) {
               
            }
            bd.close();
        
            ret = false;
            
        
        
        return men;
    }

se alguém puder ajudar agradeço,

valeu desde já

abraço!

14 Respostas

brmonteiro

são no caso duas tabelas uma de aluno e outra de professor

ou é a mesma tabela e tem um campo que serve de flag para dizer se é aluno ou professor?

R

Sim, são duas tabelas, uma aluno e uma professor.

brmonteiro

fico só na dúvida

como vc vai garantir que os emails nao vao se repetir já que estão em tabelas diferentes
tem algo no banco u na aplicação que esta tratando isso?

eu recomendaria fazer só uma tabela usuario podendo ter perfil de professor e aluno

pq no caso vc vai fazer duas consultas só para validar o aluno

R

Então eu tenho que entregar esse projeto na sexta, já não consigo fazer tal alteração,
então terei que usar as duas tabelas mesmo, e tenho já no banco garantindo que não serão iguais…
teria como fazer isso?

obrigado

calel

Procura primeiro em professor e depois em aluno.
Pq se um professor acessar ele terá um acesso maior do que se logasse como aluno.

Eu faria um método como o que você citou acima só que pesquisando na tabela professor.

Ou se vc quiser fazer uma gambis…
SELECT email_aluno as email FROM aluno WHERE email_aluno =? AND senha_aluno = ?
union all
SELECT email_professor as email from professor where email_professor =? AND senha_professor = ?

O ideal seria uma tabela de usuarios com join em perfil (professor/aluno/etc)

R

Não entendi exatamente como fazer este método procurando primeiro na tabela professor e depois na do aluno,
teria como dar uma ajuda?

a unica coisa que eu preciso é que se ele não ache em uma busque na outra,

obrigado

obrigado!

R

fiz estas alterações e ele retorna null,

public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados  
            men = null;  
            sql = "SELECT email_aluno as email FROM aluno WHERE email_aluno =? AND senha_aluno = ? union all SELECT email_professor as email from professor where email_professor =? AND senha_professor = ? ";
   
              
            bd.getConnection();  
                try {  
                      
                    PreparedStatement ps = bd.connection.prepareStatement(sql);  
                    ps.setString(1, x);//pega o login do formulario  
                    ps.setString(2, y);  
                    bd.rs = ps.executeQuery();//executa o sql  
                    if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não  
                        ret = true;  
                        men = (bd.rs.getString("email"));  
                    }  
                    else {  
                        ret = false;  
                        men = null;  
                    }  
                } catch (SQLException erro) {  
                     
                }  
                bd.close();  
              
                ret = false;  
                  
              
              
            return men;  
        }

alguém pode me ajudar?

obrigado!

Master.Abs

Veja se isso te dá uma ajuda http://www.guj.com.br/java/227418-analise-de-tela-login-resolvido

R

Olá pessoal
resolvi aquele problema
meu servilet ficou assim:

package controler;

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 dao.LogarDAO;
import javax.swing.JOptionPane;
 
/**
 *
 * @author hallan medeiros
 *
 */
public class Login extends HttpServlet {
 
    private static final long serialVersionUID = 1L;


    public Login() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	/**
	 * Vai processar a valida??o do usu?rio e senha
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        HttpSession session = request.getSession(); //obtem a sessao do usuario, caso exista
        
        String user="ramon";
        String user2="ramon";
        String email = request.getParameter("email_aluno"); // Pega o Login vindo do formulario
        String senha = request.getParameter("senha_aluno"); //Pega a senha vinda do formulario
 
            LogarDAO dao = new LogarDAO(); //cria uma instancia do DAO usuario
            dao.setEmail(email);
            dao.setSenha(senha);
            user = dao.LoginAluno(email, senha);
            user2 = dao.LoginProfessor(email, senha);
 
        //se nao encontrou usuario no banco, redireciona para a pagina de erro!
        if (user!=null) {
            //se o dao retornar um usuario, coloca o mesmo na sessao
         
            session.setAttribute("logado", "1");
            request.getRequestDispatcher("index.jsp" ).forward(request, response);
            
        }
        else{
            if(user2!=null){
                session.setAttribute("logado", "1");
                request.getRequestDispatcher("new-lesson.jsp").forward(request, response);
                
            }else{
                session.invalidate();
            request.getRequestDispatcher("login.jsp" ).forward(request, response);
            JOptionPane.showMessageDialog(null, "Usuário não encontrado");
        }
 
    }
 if(request.getParameter("acao").equals("logout")) {
			// no logout invalido a sessao
			HttpSession sessao = request.getSession();
			sessao.invalidate();
			// chamo novamente a pagina principal, que deve chamar a p?gina index
			// que ira mostrar o formulario para o usu?rio logar
			response.sendRedirect("login.jsp");
		}
}
}

porém agora não consigo com que ele encerre a sessão quando clico no link logout que tenho na minha page index, ele verifica dentro da page index e se eu não fizer o login não consigo acessar ela, mas ele não encerra a sessão quando clico em logout,
coloquei esse if na index para que ele peça o login quando for entra nela

<%
	// verificando se tem um atributo login na sessao
	// se tiver vai continuar e mostrar o menu
	if(session.getAttribute("logado") != null) {
%>


<%
	// se não existir um login na sessao, 
	// vai enviar para a página de login novamente
	} else {
%>
	<jsp:forward page="login.jsp"></jsp:forward>
<%
}
%>

e coloquei esse código no link logout:

<a href="Login?acao=logout">Logout</a>

ele chama a ação logar que está no meu Servilet
porém ele não encerra a sessão, o que estou fazendo de errado?
se alguém puder ajudar…

obrigado!

R

Ninguéém???

Obrigadoooo!

R

Alguéééééém pelooooo amoooor de Deuus?? kkkkk

obriigadoo!

thimor

Primeiro vamos colocar o principio da responsabilidade unica.
Cria um ServletLogin para fazer o login e um ServletControle para tratar o parametro acao.

quando voce chama o logout ele faz todo esse procedimento anterior e nao entra no if do get parameter.
Se nao quiser fazer 2 servelets entao faca assim

private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

String acao = request.getParameter("acao");
if(acao.equals("login") {
   //codigo que voce usa para o login
}
if(acao.equals("logout") {
    //codigo para logout
}

no formulario de login voce cria um parametro hidden com o nome acao e valor login.

R

como assim criaar um hidden?
não entendi muito bem,
estou começando agora, meu conhecimento é muti fraco
obrigado pela atenção

R

Olá fiz conforme você disse, e mesmo assim não adiantou, toda vez que aperto para fazer logout ele volta pra page de login, mas se clico em voltar no navegador ele volta pra page principal, não fecha a sessão…

Criado 23 de novembro de 2011
Ultima resposta 25 de nov. de 2011
Respostas 14
Participantes 5