我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个包含两个字段的Sample表单。
现在我有了一个数据库,并且该登录表具有以下结构。
username | password
----------------------
abcd | xyz
我还创建了与数据库的连接。我可以使用ResultSet访问表数据。 我创建了一个名为 conn 的数据库连接对象。 我知道密码以char数组的形式存储。 因此,当我尝试使用以下代码匹配密码时,它不起作用。
if(usernamefield.getText() == conn.username && passfield.getPassword().toString == conn.password) {
system.out.println("Correct");
}else {
system.out.println("Incorrect");
}
以上代码总是转到其他区块。
我还注意到passfield.getPassword()
打印了正确的密码,passfield.getPassword().toString
打印了一些随机字符,如[C@76dab03c
如何解决?
答案 0 :(得分:0)
使用equals
代替==
,它应该有效。永远不要在字符串上使用==,它几乎不会产生你期望的结果。
我认为您的代码更严重的问题是您以纯文本格式存储密码。这是一个巨大的安全风险。您应该查看密码哈希算法,例如bcrypt。
答案 1 :(得分:0)
你必须将字符串与.equals()进行比较,而不是==,但无论如何你都是这样做的。密码应该在数据库中进行散列处理,并且您应该将用户输入的内容传递给数据库并让它进行匹配,通过WHERE子句使用适当的散列功能。换句话说,请求数据库使用此用户名和密码获取用户行。