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

标签 java swing security jpasswordfield

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

相关文章:

Java Swing - 单用户应用程序到多用户应用程序

Java 窗口事件 - 最大化。如何硬编码?

security - session 与基于 token 的身份验证

javascript - spoofer.js : An unexpected error has occurred, 我应该担心吗?

java - 通过 SimpleDateFormat 解析时间字符串得到错误的日期。 (偏移 1 小时)[Android/Java]

java - ExecuteBatch 和准备语句的奇怪行为

java - 如何将监听器附加到 JavaFX 微调器?

security - 强化路径操作错误

java - 为什么这个程序打印25? (Java继承)

java - 您会推荐哪个用于 Java 的 SOAP XML 对象序列化库?