我有一个典型的char[]
密码变量,包含getter和setter。我这样做了,所以我的密码变量永远不会以纯文本显示。
private String passwordAsString;
private char[] password;
public char[] getPassword() { return password; }
public void setPassword(char[] password) { this.password = password; }
我想将密码发送到数据库,但我认为它需要以String类型发送。所以,我决定创建一个名为PasswordAsString
的新变量。有更好的方法吗?这似乎很草率。
其次我的getPasswordAsString没有将密码作为String返回。到目前为止我所拥有的是:
public void setPasswordAsString(String passwordAsString) {
this.passwordAsString = passwordAsString;
}
public String getPasswordAsString() {
return password.toString();
}
答案 0 :(得分:1)
密码的getter / setter作为String
可以像这样实现:
public void setPasswordAsString(String passwordAsString) {
this.password = passwordAsString.toCharArray();
}
public String getPasswordAsString() {
return new String(password);
}
这些直接获取并设置char[] password
字段 - 不需要passwordAsString
字段。使用new String(char[])
从char[]
转换为String
,使用String.toCharArray()
从String
转换为char[]
。
我非常确定以这样的String
传递密码会破坏使用char
数组的任何安全目的。
答案 1 :(得分:0)
char数组的toString()方法不会得到你想要的东西。相反,构造一个新的String:
public String getPasswordAsString() {
return new String(password);
}
另外,我可能会考虑不为passwordAsString字段包含一个setter(或者根本就没有第二个字段),因为这与你在这里试图完成的事情背道而驰。