String.valueOf(charArray)创建一个String,并且同样不安全。
如今,人们可以使用JDBC:
char[] password = ...;try (PreparedStatement stmt = con.prepareStatement("...")) { Reader reader = new CharArrayReader(password); stmt.setCharacterStream(1, reader); stmt.executeUpdate(); stmt.clearParameters();}Arrays.fill(password, ' ');这样可以确保在执行此代码后,没有任何对象漂浮在周围以进行垃圾收集,这可能会显示密码。
当然,只要JDBC驱动程序不泄漏即可。该 clearParameters 似乎有点过头了,但谁知道。
CharArrayReader并 没有 复制传递的数组,因此这是安全的了。
要求提供具体代码:
String sql = "UPDATE teachers SET password=? WHERe firstname=? AND lastname=?";try (PreparedStatement pStat = con.prepareStatement(sql)) { Reader reader = new CharArrayReader(newPassword); pStat.setCharacterStream(1, reader); pStat.setString(2, firstName); pStat.setString(3, lastName); pStat.executeUpdate(); pStat.clearParameters();}Arrays.fill(newPassword, ' ');由于该语句应关闭,因此我可以自由使用局部变量。


![Java char []数组jPasswordField处理和SQL更新语句 Java char []数组jPasswordField处理和SQL更新语句](http://www.mshxw.com/aiimages/31/414666.png)
