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,但它不允许我登录,而是我输入了正确的用户名和密码。
答案 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重新配对将创建使用数据库的解决方案。