Ajuda validar login como administrador ou funcionario [Resolvido]
6 respostas
T
Tadeu-Costa
Ae pessoal, ajuda com o login do meu projeto:
Estou fazendo o projeto de uma livraria e se o usuário se logar como administrador abre uma tela e se ele se logar como funcionario abre outra tela.
Eu consegui fazer o método para se logar, mas não consigo fazer a diferenciação administrador/funcionario. Vale a pena dizer que o método de login funciona, eu só preciso fazer um if para o programa buscar no meu bd, na tabela funcionarios a coluna "nivel" que pode ser 'FUNC' ou 'ADM' e dependendo de qual resultado achar, abrir uma tela para funcionario ou para o administrador.
Eis meu código:
[color=red]Se alguém puder me dar uma ajuda rápida eu agradeceria, afinal tenho só duas semanas para entregar este projeto que vai ser o meu trabalho de conclusão do técnico em informática [/color]:cry:
//BOTÃO ENTRAR DA CLASSE JT_LOGINprivatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){Stringy=jPFsenha.getText();Stringx=jTF_usuario.getText();try{AutenticacaoDaodao=newAutenticacaoDao();dao.getLista(x,y);}catch(SQLExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}catch(ClassNotFoundExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}}
//CLASSE AUTENTICACAODAOpublicclassAutenticacaoDao{privateConnectionconexao;// Senha para encriptar o códigoprivateStringcript="rachacuca";publicAutenticacaoDao()throwsSQLException,ClassNotFoundException{this.conexao=CriaConexao.getConexao();}// MÉTODO DE LOGINpublicvoidgetLista(Stringusuario,Stringsenha)throwsSQLException{// JFautenticacao aut = new JFautenticacao();Stringsql="select usuario, senha from funcionarios where usuario = ? AND senha = AES_ENCRYPT( ?, ?)";PreparedStatementstmt=(PreparedStatement)this.conexao.prepareStatement(sql);stmt.setString(1,usuario);stmt.setString(2,cript);stmt.setString(3,senha);ResultSetrs=stmt.executeQuery();if(rs.next()){// Captura o nível do usuário que pode ser://ADIMINISTRADOR=ADM ou FUNCIONARIO=FUNC//A classe autenticacaoBean contém os gets e setsAutenticacaoBeanbean=newAutenticacaoBean();bean.setUsuario(rs.getString("nivel"));// Se o nivel do usuario for 'ADM' abre a janela abaixo do administrador// E aqui está o meu if, no qual eu não sei o que botar para//diferenciar administrador de funcionarioif(){System.out.println("Bem-vindo administrador");newjT_Administrador().setVisible(true);}// Senão abre a tela do funcionarioelse{System.out.println("Bem-vindo funcionario");newjT_LivrosFunc().setVisible(true);}}else{JOptionPane.showMessageDialog(null,"Login Incorreto.\n"+"Tente novamente.\n","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);}rs.close();stmt.close();}}
cara não seria mais fácil trazer uma lista de usuario?
e depois fazer a condição fora do next?
diego.sas
Tadeu-Costa:
Ae pessoal, ajuda com o login do meu projeto:
Estou fazendo o projeto de uma livraria e se o usuário se logar como administrador abre uma tela e se ele se logar como funcionario abre outra tela.
Eu consegui fazer o método para se logar, mas não consigo fazer a diferenciação administrador/funcionario. Vale a pena dizer que o método de login funciona, eu só preciso fazer um if para o programa buscar no meu bd, na tabela funcionarios a coluna "nivel" que pode ser 'FUNC' ou 'ADM' e dependendo de qual resultado achar, abrir uma tela para funcionario ou para o administrador.
Eis meu código:
[color=red]Se alguém puder me dar uma ajuda rápida eu agradeceria, afinal tenho só duas semanas para entregar este projeto que vai ser o meu trabalho de conclusão do técnico em informática [/color]:cry:
//BOTÃO ENTRAR DA CLASSE JT_LOGINprivatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){Stringy=jPFsenha.getText();Stringx=jTF_usuario.getText();try{AutenticacaoDaodao=newAutenticacaoDao();dao.getLista(x,y);}catch(SQLExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}catch(ClassNotFoundExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}}
//CLASSE AUTENTICACAODAOpublicclassAutenticacaoDao{privateConnectionconexao;// Senha para encriptar o códigoprivateStringcript="rachacuca";publicAutenticacaoDao()throwsSQLException,ClassNotFoundException{this.conexao=CriaConexao.getConexao();}// MÉTODO DE LOGIN// Este método não retorna uma lista, acho que o nome não esta adequado, fora de padrãopublicvoidgetLista(Stringusuario,Stringsenha)throwsSQLException{// JFautenticacao aut = new JFautenticacao();Stringsql="select usuario, senha from funcionarios where usuario = ? AND senha = AES_ENCRYPT( ?, ?)";PreparedStatementstmt=(PreparedStatement)this.conexao.prepareStatement(sql);stmt.setString(1,usuario);stmt.setString(2,cript);stmt.setString(3,senha);ResultSetrs=stmt.executeQuery();if(rs.next()){// Captura o nível do usuário que pode ser://ADIMINISTRADOR=ADM ou FUNCIONARIO=FUNC//A classe autenticacaoBean contém os gets e setsAutenticacaoBeanbean=newAutenticacaoBean();bean.setUsuario(rs.getString("nivel"));// Se o nivel do usuario for 'ADM' abre a janela abaixo do administrador// E aqui está o meu if, no qual eu não sei o que botar para//diferenciar administrador de funcionarioif(){System.out.println("Bem-vindo administrador");newjT_Administrador().setVisible(true);}// Senão abre a tela do funcionarioelse{System.out.println("Bem-vindo funcionario");newjT_LivrosFunc().setVisible(true);}}else{JOptionPane.showMessageDialog(null,"Login Incorreto.\n"+"Tente novamente.\n","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);}rs.close();stmt.close();}}
Mas poderia resolver este caso, adicionando na tabela de funcionarios uma coluna perfil, onde ao cadastrar um usuário vc informa seu status,("adimin", entre outros...).
Assim no resultado do seu select fica fácil de saber o nível do usuario...
Para organizar seu projeto:
1º altere o nome do método, getLista... Não retorna nenhuma lista....
2º Poderia ser exemplo:
public Usuario logar(Usuario usuario) throws SQLException {
// JFautenticacao aut = new JFautenticacao();
String sql = "select usuario, senha from funcionarios where usuario = ? AND senha = AES_ENCRYPT( ?, ?)";
PreparedStatement stmt = (PreparedStatement) this.conexao.prepareStatement(sql);
stmt.setString(1, usuario.getNome());
stmt.setString(2, cript);
stmt.setString(3, usuario.getSenha());
ResultSet rs = stmt.executeQuery();
if (rs.next()){
// popula um novo Usuario com o retorno do resulSet e o mesmo será o retorno do método
3º Cria uma Camada de servico que faz a chamada ao seu dao e trata o retono.... chamando as devidas telas
Espero ter ajudado,
Abçs
T
Tadeu-Costa
Falae diego.sas. Realmente eu tinha um campo no mo meu BD que se chamava nível e consegui fazer o login. E através dele eu consegui fazer o login finalmente! Só fiquei com uma dúvida: [color=red]como é que eu faço pra fechar a janela de login depois de o usuário logar-se?[/color]
Ai vai o método que eu fiz pra me logar:
// CLASSE AUTENTICACAODAO //Método de loginpublicvoidlogar(Stringusuario,Stringsenha,Stringnivel)throwsSQLException{Stringsql="select usuario, senha, nivel from funcionarios where usuario = ? and senha = AES_ENCRYPT( ?, ?) and nivel = ?";PreparedStatementstmt=(PreparedStatement)this.conexao.prepareStatement(sql);stmt.setString(1,usuario);stmt.setString(2,cript);stmt.setString(3,senha);stmt.setString(4,nivel);ResultSetrs=stmt.executeQuery();if(rs.next()){// Abre a tela do administradorif(nivel.equals("ADMINISTRADOR")){System.out.println("Bem-vindo administrador");newjT_Administrador().setVisible(true);//Era por aqui que eu queria fechar a janela de login ou....}// Senão abre a tela do usuarioelseif(nivel.equals("FUNCIONARIO")){System.out.println("Bem-vindo funcionario");newjT_LivrosAdm().setVisible(true);}//....ou então fechar por aqui.}// Caso login esteja incorreto, mostra essa fraseelse{JOptionPane.showMessageDialog(null,"Login Incorreto.\n"+"Tente novamente.\n","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);}rs.close();stmt.close();}
diego.sas
Tadeu-Costa:
Falae diego.sas. Realmente eu tinha um campo no mo meu BD que se chamava nível e consegui fazer o login. E através dele eu consegui fazer o login finalmente! Só fiquei com uma dúvida: [color=red]como é que eu faço pra fechar a janela de login depois de o usuário logar-se?[/color]
Ai vai o método que eu fiz pra me logar:
//FORM JT_LOGIN //Botão logarprivatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){Stringsenha=jPFsenha.getText();Stringusuario=jTF_usuario.getText();Stringnivel=jCB_nivel.getSelectedItem().toString();try{// Fala ae Tadeu-Costa, cara procura manipular objetos,// Poderia passar um único objeto Usuario ao invés de 3 Strings....AutenticacaoDaodao=newAutenticacaoDao();dao.logar(usuario,senha,nivel);//Mas ficaria assim.....// dao.logar(this, usuario, senha, nivel);}catch(SQLExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}catch(ClassNotFoundExceptionex){Logger.getLogger(jT_Login.class.getName()).log(Level.SEVERE,null,ex);}}
// CLASSE AUTENTICACAODAO //Método de login// Aletera este método assim.... publicvoidlogar(Jframeframe,Stringusuario,Stringsenha,Stringnivel)throwsSQLException{Stringsql="select usuario, senha, nivel from funcionarios where usuario = ? and senha = AES_ENCRYPT( ?, ?) and nivel = ?";PreparedStatementstmt=(PreparedStatement)this.conexao.prepareStatement(sql);stmt.setString(1,usuario);stmt.setString(2,cript);stmt.setString(3,senha);stmt.setString(4,nivel);ResultSetrs=stmt.executeQuery();if(rs.next()){// Abre a tela do administradorif(nivel.equals("ADMINISTRADOR")){System.out.println("Bem-vindo administrador");// Neste ponto vc faz....frame.setVisible(false);newjT_Administrador().setVisible(true);//Era por aqui que eu queria fechar a janela de login ou....}// Senão abre a tela do usuarioelseif(nivel.equals("FUNCIONARIO")){System.out.println("Bem-vindo funcionario");newjT_LivrosAdm().setVisible(true);}//....ou então fechar por aqui.}// Caso login esteja incorreto, mostra essa fraseelse{JOptionPane.showMessageDialog(null,"Login Incorreto.\n"+"Tente novamente.\n","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);}rs.close();stmt.close();}
Verifica os comentários no seu código...
abraços.
T
Tadeu-Costa
Ae diego.sas funcionou! Valeu cara, salvou a minha vida kkkk.
diego.sas
Opa blz…
So edita seu 1º post, altera o título para [Resolvido]
abraços, boa sorte.