我JPasswordField
在我的程序中使用 a 。当我问getPassword()
时,我得到一个char[]
数组。但是当我ActionListener
向JPasswordField
和 询问getActionCommand()
时,我得到的密码是String
. 此密码是否在事件对象中保存为String
?这不是安全问题吗?
问问题
314 次
1 回答
3
当您没有为组件设置任何操作命令时,其中的文本将是操作命令。这就是您获取密码的原因。
即使对于JTextField
也
JTextField jt=new JTextField("text");
jt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println(ae.getActionCommand());
}
});
这是一个安全问题,因为您将密码作为字符串获取,它是不可变的,而不是char[]
每当未设置显式操作命令时,组件中的文本将被发送到ActionEvent
构造函数,尽管您没有专门将其设置为操作命令。command
参数虽然可以,null
但不推荐为null
,因此组件中的文本默认为动作命令。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());
}
});
于 2013-07-17T13:43:33.080 回答