style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ayuda Formulario Login

Buen día compañeros el motivo de mi entrada es la siguiente, espero alguien pueda apoyarme.

tengo un formulario login tipico, pide usuario, contraseña un boton para entrar y uno para salir.

en mi clase tengo un metodo llamado acceder que es el siguiente.

void acceder(String usuario, String pass) {
        String usu = "";
        String pas = "";

        String sql = "SELECT * FROM usuario WHERE usuario='" + usuario + "' && password='" + pass + "'";
        try {
            Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                usu = rs.getString("usuario");
                pas = rs.getString("password");
            }

            if (usu.equals(usuario) && pas.equals(pass)) {
                this.setVisible(false);
                InterfacePrincipal principal = new InterfacePrincipal();
                principal.setVisible(true);
            } else {
                JOptionPane.showMessageDialog(null, "Usuario y/o Contraseña no Validos");
            }
        } catch (SQLException ex) {
            Logger.getLogger(InterfaceLogin.class.getName()).log(Level.SEVERE, null, ex);
        }

mi boton entrar consta de los siguiente.

String usu=txtUser.getText();
        String pas=new String(txtPassword.getPassword());
        if(usu.equals("") && pas.equals("")){
        JOptionPane.showMessageDialog(null, "\"Los campos de texto están vacíos, Ingrese sus datos Porfavor\"");
        }
        else{
        acceder(usu, pas);
        }

ademas tengo un evento keypressed, para que cuando el usuario presione enter sea el mismo resultado que presionar el boton aceptar

el codigo es el siguiente.

char car=(char) evt.getKeyCode();
       
        if(car == KeyEvent.VK_ENTER){
            String usu;
            String pas;
            usu = txtUser.getText();
            pas = new String(txtPassword.getPassword());
            acceder(usu, pas);
        } else {}

Todo esta perfecto, el problema lo tengo cuando presiono enter con los campos vacios, puesto que entra al formulario principal y se supone que no lo debe de hacer, cuando le doy clic en entrar con los campos vacios hace lo correcto manda el mensaje que los campos estan vacios, pero cuando presiono enter con los campos vacios no?

Alguna sugerencia del por qué

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

empty

y por que no usas en tu condicion "if" la palabra "empty" esta valida si el campo esta vacio o no y regresa un booleano (falso o verdadero) y en base a lo que evalue la condicion enviara mensaje de error o te dejara entrar al sistema de manera normal.

recuerda que en el evento "enter" tambien debes evaluar el usu y con si estan vacios o no.

Es muy peligroso que pases

Es muy peligroso que pases directamente lo que el usuario escriba, porque puede escribir SQL directamente y "hackerte",

Que pasa si el usuario escribe: pepe' ; drop table usuario ; -- Adios tabla...

Utiliza un prepared statement y/o lee sobre SQL Injection

( y para pronto este comic http://xkcd.com/327/ )

Me corrigan si esta mal asi

MODEL:

public class UsuarioDAO {

    public boolean Validar(String usuario , String pass)throws Exception{

        Connection cn=null;
        boolean re=false;
        try {
        cn=AccesoBD.jdbc.getConnection();
         String sql="select * from usuarios where usuario=? and pass=?";
        PreparedStatement ps=cn.prepareStatement(sql);
          ps.setString(1,usuario);
          ps.setString(2,pass);
         ResultSet r=ps.executeQuery();
       
        while(r.next()){
          re=r.getRow()==1;
        }
        r.close();
        ps.close();
        cn.close();
        } catch (SQLException e) {
         throw e;
        }
       
       return re;
    }
   
}
VISTA:
   try{
           if(usbl.ValidarUsuario(txtUsuario.getText(),txtPass.getText())){
               Entro ent=new Entro();
               ent.setVisible(true);
           
        }else{
            JOptionPane.showMessageDialog(null,"Usuario Y/O Contraseña Incorrecta ");
        }
       
        }catch(Exception e){
            System.out.println("Error :"+e.getMessage());
        }

Imagen de chicowed

Muy bueno

Ahora entiendo el comentario de @OscarRyz de no pasar los datos que escribe el usuario directamente.

String sql="select * from usuarios where usuario=? and pass=?";
PreparedStatement ps=cn.prepareStatement(sql);
ps.setString(1,usuario);
ps.setString(2,pass);

Por cierto amigo utliza <"code"> "Escribe tu codigo aquí" <"/code"> Sin las comillas
para que tu código sea mas legible, saludos Gracias.

Imagen de adrianaaae

O se loggee sin tener ningún usuario :P

String sql = "SELECT * FROM usuario WHERE usuario='" + usuario + "' && password='" + pass + "'";

Y.... si hace esto xxxxx' or 1=1; --

Se puede ingresar sin tener un usuario o contraseña.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">