我正在开发一个项目并且一直试图篡改用户名/密码。您可以在下面看到代码。每当我点击登录按钮时,用户名变为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;
}
}
如果有人想告诉我,我已经搞砸了创建一个安全的用户名和密码以免给我带来麻烦,那也就是花花公子。
答案 0 :(得分:10)
您正在使用=
进行分配,但此处所需的比较运算符为==
。但是,authenticated
已经是boolean
,所以只需使用:
if(authenticated){
答案 1 :(得分:2)
问题在于您尝试将两个表达式与=
符号进行比较,这意味着java中的赋值。 比较符号为==
。
但是,如果您以这种方式更改代码:
if(authenticated == true)
您仍在将Object
(Boolean
)与primitive type
(boolean
)进行比较。
正确的方法是使用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);