gpt4 book ai didi

java - 具有操作命令的 JPasswordField 安全性

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:56 25 4
gpt4 key购买 nike

我在我的程序中使用了一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com