带动作命令的JPasswordField安全性
我在我的程序中使用JPasswordField
。 当我问getPassword()
,我得到一个char[]
数组。 但是当我向JPasswordField
添加ActionListener
并询问getActionCommand()
,我将密码作为String
。 此密码是否在事件对象中保存为String
? 这不是一个安全问题吗?
为组件设置无动作命令时,其中的文本将是动作命令。 这就是您获取密码的原因。
即使对于JTextField
也是如此
JTextField jt=new JTextField("text"); jt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae) { System.out.println(ae.getActionCommand()); } });
这是一个安全问题,因为您获取的密码为String,它是不可变的而不是char[]
每当未设置显式操作命令时,组件中的文本将被发送到ActionEvent
构造函数,尽管您没有将其专门设置为操作命令。 尽管command
参数可以为null
,但建议不要为null
,因此默认情况下组件中的文本是action命令。 如果JPasswordField
没有密码,则空字符串将是action命令。
不要尝试将action命令设置为null
,如果为null
,则JPasswordField
的文本将是action命令。 问题再次出现。
因此,我建议您为JPasswordField
设置一些操作命令,而不会像现在这样保留它,直到Oracle对此进行纠正。
JPasswordField jt=new JPasswordField("text"); jt.setActionCommand(""); jt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae) { System.out.println(ae.getActionCommand()); } });