我在我的程序中使用了一个JPasswordField
。当我询问 getPassword()
时,我得到一个 char[]
数组。但是当我将 ActionListener
添加到 JPasswordField
并询问 getActionCommand()
时,我得到的密码是 String
.此密码是否作为 String
保存在事件对象中? 这不是安全问题吗?
最佳答案
当你没有为组件设置 Action 命令时,其中的文本将是 Action 命令。 这就是您获取密码的原因。
即使对于 JTextField
也是
JTextField jt=new JTextField("text");
jt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println(ae.getActionCommand());
}
});
这是一个安全问题,因为您获取的密码是不可变的字符串形式,而不是 char[]
只要未设置明确的 Action 命令,组件中的文本将被发送到 ActionEvent
构造函数,尽管您没有专门将其设置为 Action 命令。 command
参数虽然可以为null
,但不建议为null
,因此组件中的文本默认为action command .如果 JPasswordField
中没有密码,则操作命令将是一个空字符串。
不要尝试将操作命令设置为null
,如果它是null
,那么JPasswordField
中的文本将是操作命令.问题又来了。
因此,我建议您为 JPasswordField
设置一些操作命令,而不要像现在这样保留它,直到 Oracle 纠正此问题为止。
JPasswordField jt=new JPasswordField("text");
jt.setActionCommand("");
jt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println(ae.getActionCommand());
}
});
关于java - 具有操作命令的 JPasswordField 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17693730/