[Resolvido] Tela de login e acesso a telas por permissão

3 respostas Resolvido
Junior_Campanha

Pessoal boa tarde

Andei dando uma olhada nos posts sobre tela de login mas acho que nenhuma sanou minha duvida

o que tenho é o seguinte

tenho uma tela de login (não foi eu quem desenvolvi)

estou adaptando o código para usar na minha aplicação

o código original é esse

String sql="select * from Employee_data where userid =? and password =?  ";
    try{
        int count=0;
    pst =conn.prepareStatement(sql);
    pst.setString(1, txt_userid.getText());
    pst.setString(2, txt_password.getText());
   
    rs=pst.executeQuery();
    while(rs.next()){
    count=count+1;
    }
     String division= (jCombo_division.getSelectedItem().toString());

         
                    if(division=="Admin") {
    if(count==1){
    JOptionPane.showMessageDialog(null, "Username and password correct");
    Admin_JFrame s = new Admin_JFrame();
    s.setVisible(true);
     close();
    
    }
    else if(count>1){
    JOptionPane.showMessageDialog(null, "Duplicate user and password Access denied");
   // Admin_JFrame s = new Admin_JFrame();
   // s.setVisible(true);
    
    }
    else
      JOptionPane.showMessageDialog(null, "Username and password not correct");
    
                    }
                     else   if(division=="Manager"||division=="Engineer") {

                         
               if(count==1){
    JOptionPane.showMessageDialog(null, "Username and password correct");
    User_JFrame s = new User_JFrame();
    s.setVisible(true);
     close();
    
    }
    else if(count>1){
    JOptionPane.showMessageDialog(null, "Duplicate user and password Access denied");
   // Admin_JFrame s = new Admin_JFrame();
   // s.setVisible(true);
    
    }
    else
      JOptionPane.showMessageDialog(null, "Username and password not correct");
                
                         
                     }
    }catch(Exception e)
    {
        e.printStackTrace();   
        JOptionPane.showMessageDialog(null, e);

    }finally {
try{
  rs.close();
      pst.close();
     //conn.close();
  }
  catch(Exception e) {
                   }
      } 
        
    }

na tela de login possui os campos do login e senha e um combo box onde vc seleciona o nível de acesso para abrir a tela

se escolher admin e o login e senha cadastrados ter no nível de permissão admin então abre a tela de administração

o que eu quero fazer é retirar o combobox e fazer essa verificação automática apenas digitando o login e senha

porem não estou conseguindo fazer

alguém pode me ajudar

3 Respostas

4mega
Solucao aceita

É tranquilho, basta existir uma coluna no banco que defina o tipo de acesso deste usuário, tendo isso em mão faça o seguinte:

Este é o metodo de validação:

public boolean validarUsuario(String login, String senha){
    String sql="select * from Employee_data where userid =? and password =?  ";
    try{
        pst =conn.prepareStatement(sql);
        pst.setString(1,login);
        pst.setString(2, senha);
        rs=pst.executeQuery();
        Usuario usu = null;
        if(rs.next()){ // mudei para if
            usu = new Usuario();
            usu.setId(rs.getInt(1));
            usu.setSenha(rs.getString(2));
            usu.setTipoAcesso(rs.getString(3)); // digamos q a coluna 3 seja o Tipo Acesso
        }
        return usu;
    }catch(Exception a){
        return null;
    }
}

Este será o código do botão ou sei la qual evento vc esteja usando:

private void jButtonBlaBlaBla(new Event_Sei_la a){ // n lembro o comando certo, mas vc sabe q deve ignorar isso
  String login = txt_userid.getText();
  String senha = txt_password.getText();
  Usuario user = validarUsuario(login,senha);
  if(user != null){
      if(user.getTipoAcesso().equals("Admin")){
          Admin_JFrame s = new Admin_JFrame();
          s.setVisible(true);
          close();
      }else{
           User_JFrame s = new User_JFrame();
           s.setVisible(true);
           close();
      }
  }else{
     JOptionPane.showMessageDialog(null, "Username and password not correct");
  }
}

E esta é a classe Usuario:

public class Usuario{

    private String id;
    private String senha;
    private String tipoAcesso;

    public Usuario(){
    }

    public String getId(){
          return id;
    }

    public void setId(String id){
          this.id = id;
    }
  
    public String getSenha(){
          return senha;
    }

    public void setTipoAcesso(String tipo){
          this.tipoAcesso= tipo;
    }

    public String getTipoAcesso(){
          return tipoAcesso;
    }

    public void setSenha(String senha){
          this.senha = senha;
    }
}

Este meu código deve estar cheio de erros pois codifiquei sem nenhum framework, porem é este o conceito básico de qualquer sistema orientado a objetos. Divide seu código em métodos e classes, mantendo-o mais organizado e reaproveitado

Junior_Campanha

Obrigado pela ajuda

ontem estava tentando e consegui fazer funcionar fiz praticamente o que vc fez

porem o código que estou modificando não foi separado as classes logica e dao o cara misturou tudo :slight_smile:

estou agora trabalhando para estruturar o código para ficar mais limpo e fácil de entender

Junior_Campanha

O meu código ficou assim

String sql = "select * from USUARIO where LOGIN =? and SENHA =?  ";
    try{
        int count = 0;
        String division = null;
    pst = conn.prepareStatement(sql);
    pst.setString(1, txt_userid.getText());
    pst.setString(2, txt_password.getText());
   
    rs = pst.executeQuery();
    while(rs.next()){
    count = count+1;
    division = rs.getString("NIVEL DE ACESSO");
    
    }
    if(txt_userid.getText().equals("") || txt_userid.getText().equals("")){
      JOptionPane.showMessageDialog(null, "Login ou Senha não preenchidos"); 
    }else{
     if(division.equals("Admin")){
        if (count==1) {
            JOptionPane.showMessageDialog(null, "LOGIN E SENHA CORRETOS! Bem Vindo Administrador");
            Admin_JFrame s = new Admin_JFrame();
            s.setVisible(true);
            this.dispose(); 
        }else if(count>1){
                JOptionPane.showMessageDialog(null, "Login e Senha duplicados!! Acesso Negado");
                txt_userid.setText("");
                txt_password.setText("");    
        }
    }else if(division.equals("Usuario")){
        if (count==1) {
            JOptionPane.showMessageDialog(null, "LOGIN E SENHA CORRETOS");
            Principal fp = new Principal();
            fp.setVisible(true);
            this.dispose();
        }else if(count>1){
                JOptionPane.showMessageDialog(null, "Login e Senha duplicados!! Acesso Negado");
                txt_userid.setText("");
                txt_password.setText("");    
        }
        
    }   
    }    
    
    }catch(Exception e)
    {
        e.printStackTrace();   
        JOptionPane.showMessageDialog(null, "Login e Senha incorretos");

    }finally {
try{
      rs.close();
      pst.close();
     //conn.close();
  }
  catch(Exception e) {
                   }
      }

Assim está funcionando mas vou dar mais uma olhada para separa a logica, classes etc

Criado 20 de dezembro de 2016
Ultima resposta 21 de dez. de 2016
Respostas 3
Participantes 2