Java用户名和密码始终返回true

时间:2015-01-22 17:31:46

标签: java arrays passwords char username

我正在开发一个项目并且一直试图篡改用户名/密码。您可以在下面看到代码。每当我点击登录按钮时,用户名变为bobsyouruncle,向我表明它已经找到了一个" true"方法中的价值。问题在于,无论输入如何,它总是如此。这更令人困惑,因为如果我改变"返回true"低于"返回false"然后我仍然得到bobsyouruncle。有什么建议吗?

    loginButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            Boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword());

            if(authenticated = true){
                usernameField.setText("Bobsyouruncle");
            } else {
                System.exit(0);
            }

        }
    });

以下是访问过的方法。

private Boolean AuthenticateCredentials(String user, char[] pass) {
    //This is only a placeholder.
    String theCorrectAnswer = "42";
    String theCorrectUser = "FPrefect";
    char[] passcode = theCorrectAnswer.toCharArray();
    optionPanel.showInternalMessageDialog(securityPanel,"Eggs are not supposed to be green.");
    if (user.equals(theCorrectUser) && Arrays.equals(passcode,pass)) {
        return true;    
    } else {
        return false;
    }

}

如果有人想告诉我,我已经搞砸了创建一个安全的用户名和密码以免给我带来麻烦,那也就是花花公子。

2 个答案:

答案 0 :(得分:10)

您正在使用=进行分配,但此处所需的比较运算符为==。但是,authenticated已经是boolean,所以只需使用:

if(authenticated){

答案 1 :(得分:2)

问题在于您尝试将两个表达式与=符号进行比较,这意味着java中的赋值比较符号为==

但是,如果您以这种方式更改代码:

if(authenticated == true)

您仍在将ObjectBoolean)与primitive typeboolean)进行比较。

正确的方法是使用boolean。将函数表单Boolean的返回值更改为boolean

private boolean AuthenticateCredentials(String user, char[] pass) {
    return (user.equals("FPrefect") && Arrays.equals("42".toCharArray(), pass);
}

然后,在按钮监听器中执行相同的操作:

boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword());
if(authenticated)
    usernameField.setText("Bobsyouruncle");
else
    System.exit(0);