如何将jTextEntry与数据库值进行比较

时间:2018-04-22 11:36:44

标签: java jdbc passwords

try     
                       {

                                Class.forName("org.sqlite.JDBC");
                                 Connection c=DriverManager.getConnection("jdbc:sqlite:voter.db");
                                  ResultSet rs;
                                Statement s;
                                        s=c.createStatement();
                                 p="select voterId,password  from voter where name='userName'";
                                  rs=s.executeQuery(p);
                while(rs.next())
                 {
                     vi=rs.getString("voterId");
                     pw=rs.getString("password");


                 if(voterId.equalsIgnoreCase(vi)&&Password.equalsIgnoreCase(pw))
                             {
                                           voting v =new voting();
                                           v.setVisible(true);
                                             this.dispose();

                              }else
                             {
                               System.out.println("Invalid pasword");
                              }
                        }

这是我的登录表单代码,我试图比较jTextField的voteID和密码与存储在数据库中的voterID和密码。使用neatbeans,但它不允许我登录,而是我输入了正确的用户名和密码。

1 个答案:

答案 0 :(得分:0)

您没有为在gui中输入的用户名选择数据库行。您根本没有使用gui中的用户名 - 您的查询已经硬编码'userName'。因此,您将获得名为userName的用户的密码。

附注:将原始密码作为纯文本存储在数据库中是安全方面的一种可怕做法。您应该使用唯一的盐和存储哈希密码的密码。在GUI中输入的密码应使用相同的算法进行散列并在查询中使用。这样,如果有人窃取数据库,他将无法学习用户密码。有关详细信息,请参阅https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

使用像Spring这样的Java框架可以为您解决许多问题。有关如何使用Spring Security创建登录表单的指导,请参阅https://spring.io/guides/gs/securing-web/。该示例使用InMemoryUserDetailsManager,但将其与JdbcUserDetailsManager重新配对将创建使用数据库的解决方案。