Java 是否可以在Servlet中使用char[]而不是字符串来存储密码?

Java 是否可以在Servlet中使用char[]而不是字符串来存储密码?,java,security,servlets,passwords,Java,Security,Servlets,Passwords,我读了几篇关于安全的文章和帖子(注 或 由于从请求中检索参数值使用request.getParameter(“passwordFieldName”)返回字符串,因此是否有任何选项可以从请求中检索作为字符[]的参数?您只需使用字符串的方法ToCharray将其转换为字符[] String str = request.getParameter("passwordFieldName"); char[] pwArr = str.toCharArray(); 有关更多信息,请参阅。不幸的是,我不知道有什

我读了几篇关于安全的文章和帖子(注 或


由于从请求中检索参数值使用request.getParameter(“passwordFieldName”)返回字符串,因此是否有任何选项可以从请求中检索作为字符[]的参数?

您只需使用
字符串的方法
ToCharray
将其转换为
字符[]

String str = request.getParameter("passwordFieldName");
char[] pwArr = str.toCharArray();
有关更多信息,请参阅。

不幸的是,我不知道有什么办法

请求参数已经加载,希望在内部作为重复使用的byte[]或char[]加载

所以也许有人应该重新实现一点HTTP服务器?不是我

您可以在客户端将密码拆分为多个变量并进行加密。这样是否更好


如果您不信任您的服务器平台,最好使用OpenID或其他委托身份验证。

您还可以使用
getBytes(String charset)
byte[]
的形式获取字符串。str.tocharray()返回新分配的字符数组(请参阅javadoc),因此字符串密码str将出现在系统中的任何位置,在任何线程转储/堆分析器中,直到垃圾回收,这就是我试图避免的,我相信密码在所有情况下都会出现,因为它将出现在服务器请求的内存中。无论您做什么,字符串密码都会出现在我的内存中根据tihs页面,mory somewhere.fwiw Restlet似乎做得更好:。请注意基本身份验证代码(那里有一个指向Github的完整代码链接)是如何以字符[]的形式获取机密的并将其写入头文件,而不在任何地方创建临时字符串。我使用的是Jersey,不是Restlet,但在查找可能重复的