用户登录用的数据库

问题描述:

用户信息比较,我想,以确保当用户输入用户名密码&,认证是由输入是否匹配在user表中某一行检查完成。 以下是目前为止的代码:它只允许数据库中的第一个用户登录。请建议我如何设置正确。谢谢用户登录用的数据库

private class thehandler implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent ae) { 
     String namevalue = usertext.getText(); 
     String pwdvalue = pwdtext.getText(); 

     //read values from user table in sql database  
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String conUrl = "jdbc:mysql://localhost/hall?" + 
           "user=root&password=blend"; 

     Connection con = DriverManager.getConnection(conUrl); 
     Statement stmt = con.createStatement(); 

     ResultSet rs = stmt.executeQuery("SELECT * FROM user"); 

     while(rs.next()) { 

      if(namevalue.equals(rs.getString("userName")) && pwdvalue.equals(rs.getString("password"))) { 
      JOptionPane.showMessageDialog(null, "You are logged in", 
        "Makhall login", JOptionPane.INFORMATION_MESSAGE); 
      //move on to homepage if user is valid 
      homePage home = new homePage(); 
      home.setAlwaysOnTop(rootPaneCheckingEnabled); 
      } 
      else { 

      JOptionPane.showMessageDialog(null, "Incorrect username or password", 
        "Error", JOptionPane.ERROR_MESSAGE); 
      } 
      break; 
     } 
    } 
    catch (SQLException e) { 
     System.out.println("SQL Exception: "+ e.toString()); 
    } 
    catch (ClassNotFoundException cE) { 
     System.out.println("Class Not Found Exception: "+ cE.toString()); 
    } 

    } 
} 
+0

你甚至不说它有什么问题。如果您想让某人评价您的代码,请尝试[代码评论](http://codereview.stackexchange.com/),否则请告诉我们什么不起作用以及该做什么。 – Widor

+0

随着你发布的代码的质量和你遇到的问题,我只能建议你不要实施自己的安全措施,而没有真正阅读到网络安全 – Joost

+1

您是否将密码作为明文存储在数据库中?让人惊讶。这是什么网站,所以我不注册? – bluevector

对不起,我认为这是可怕的代码。你将所有东西混合在一起:UI,数据库连接,查询等Java是一种面向对象的语言。好的对象设计的租户之一是凝聚力:有一个班级做好一件事情。

首先将数据库查询分隔成一个数据访问对象。让它工作,测试它,让其他客户简单地使用它。通过让更简单的对象进行协作,您将构建复杂的解决方案。

你眼前的问题是,你需要选择一个WHERE子句:WHERE username = ?

您只想检查手头用户的密码。

这个问号是故意的:使用PreparedStatement,而不是Statement。

你选择所有从数据库中的用户。永远不要这样做。相反,请选择具有给定登录名的用户。如果存在,请检查密码。如果它不存在,那么登录本身是不正确的。

另外:从UI代码

  • 单独的数据库访问代码。这些应该在不同的班级。
  • 不在数据库中存储纯文本密码。对它们进行哈希处理,对它们进行哈希处理,然后检查密码,对密码进行哈希处理,对其进行哈希处理,并将其与数据库中存储的盐渍哈希密码进行比较。

我也做了相同的程序。看到这里:

String m=jt1.getText(); 
String n= new String(jt2.getPassword()); 
try{   
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost/darshanproject","root",""); 
      Statement st = con.createStatement(); 
      String q="select * from emp where UID='"+m+"'"; 
      ResultSet rs=st.executeQuery(q); 
      rs.next(); 
      String user, pass; 
      user =rs.getString("UID"); 
      pass =rs.getString("password"); 
      { if(m.compareTo(user)==0) 
       if(n.compareTo(pass)==0) 
        System.out.println("login Success"); 
       else 
        System.out.println("Wrong Password"); 

      } 
     }catch(Exception ex){ 
      System.out.println(ex); 
     }