10文字未満のパスワードを入力すると、パスワードが表示されますPassword cannot exceed 10 characters
。
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
String name = Name.getText();
String Username = uName.getText().toString();
String Pass1 = uPass.getPassword().toString();
String Confirm = uConfirm.getPassword().toString();
String Status = "OFFLINE";
int PassLen = Pass1.length();
if (Username.equals("") || Pass1.equals("") || Confirm.equals("") || name.equals(""))
{
JOptionPane.showMessageDialog(null, "You cannot leave any fields blank when creating an Account. Please Try Again");
}
else if ((uPass.getPassword().toString()).length()>10)
{
uPass.setText("");
uConfirm.setText("");
JOptionPane.showMessageDialog(null, "Password cannot exceed a maximum of 10 characters.");
}
else if (!Pass1.equals(Confirm))
{
uConfirm.setText("");
lblError1.setText("Passwords Do Not Match.");
lblError2.setText("Please re-enter your Password.");
}
else
{
try {
DB_Connect connect = new DB_Connect();
ResultSet rs = connect.queryTbl("SELECT * FROM ACOUNTS");
boolean AlreadyUser = false;
String User;
while (rs.next())
{
User = rs.getString("Username");
if(Username.equals(User))
{
AlreadyUser = true;
}
}
if (AlreadyUser==false)
{
connect.updateTbl("INSERT INTO NBUSER.ACCOUNTS (USERNAME,PASSWORD,STATUS,NAME)VALUES ('"+Username+"','"+Pass1+"','"+Status+"','"+name+"')");
JOptionPane.showMessageDialog(null, "Account Created Successfully !");
this.dispose();
new Topics().setVisible(true);
}
else
{
JOptionPane.showMessageDialog(null, "The Username you have selected already exists. Please select a different Username");
uPass.setText("");
uConfirm.setText("");
}
} catch (SQLException ex) {
Logger.getLogger(CreateAccount.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
明らかにSwingを使用しているJPasswordField
ため、パスワードにを使用している可能性も非常に高くなります。では、getPassword
実際に何が行われるのか見てみましょう。
public char[] getPassword()
このTextComponentに含まれるテキストを返します。基になるドキュメントがnullの場合、NullPointerExceptionが発生します。セキュリティを強化するために、使用後に各文字をゼロに設定して、返された文字配列をクリアすることをお勧めします。
戻り値:テキスト
ご覧のとおり、はでパスワードを返します。char[]
このクラスは結果のtoString
呼び出しをオーバーライドしないuPass.getPassword().toString()
ため、次のようになります。
[C @ 1d44bcfa
これはを呼び出した結果ですObject#toString
。
この文字列の長さは11であるため、10より大きくなり、else if
ブロック(else if ((uPass.getPassword().toString()).length()>10)
)が入力されます。
これを修正するには、次のようなString
コンストラクターを呼び出しますString(char[])
。
String Pass1 = new String(uPass.getPassword());
これを現在の問題の「クイックフィックス」として使用し、最初に返されたを使用する方法を見つけてくださいchar[]
。引用されたJavaDocで述べられているように、char配列は使用後に「クリーン」にすることをお勧めします。そのため、パスワードはそこに保存されなくなります。を使用して配列から文字列を作成することにより、パスワードを含み、そこから削除する必要がある別のオブジェクトをヒープ内にnew String(uPass.getPassword())
作成します。だからそれはあなたのためにより多くの仕事を追加するでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加