无法匹配java中的密码字段与oracle数据库

时间:2014-04-03 21:08:56

标签: java database passwords string-matching

我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个包含两个字段的Sample表单。

  1. TextField类型的用户名字段
  2. PasswordField类型的密码
  3. 现在我有了一个数据库,并且该登录表具有以下结构。

    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

    如何解决?

2 个答案:

答案 0 :(得分:0)

使用equals代替==,它应该有效。永远不要在字符串上使用==,它几乎不会产生你期望的结果。

我认为您的代码更严重的问题是您以纯文本格式存储密码。这是一个巨大的安全风险。您应该查看密码哈希算法,例如bcrypt。

答案 1 :(得分:0)

你必须将字符串与.equals()进行比较,而不是==,但无论如何你都是这样做的。密码应该在数据库中进行散列处理,并且您应该将用户输入的内容传递给数据库并让进行匹配,通过WHERE子句使用适当的散列功能。换句话说,请求数据库使用此用户名和密码获取用户行。