java - 如何在不使用 System.console() 的情况下从控制台读取密码?

标签 java security console passwords

我点击了this eclipse bug ,其中 System.console() 不适用于 Java 应用程序启动。我有一个小型 Java 应用程序,该应用程序还需要输入只能从 IDE 内启动的密码。有没有其他方法可以安全地仅使用 JDK 类从控制台读取密码(即不在控制台上显示)?

编辑:
我知道 System.in,但那是在控制台中显示输入的字符,因此不安全。

EDIT2:
我还想指出,可以在项目中的 windows 下创建批处理文件或 linux/unix 下的小 bash 脚本。通过使用系统默认编辑器在 eclipse 中打开此文件,它将在 System.console() 可用的新控制台窗口中启动。这样您就可以从 Eclipse 中启动应用程序。但必须先构建项目,以便二进制文件存在。

最佳答案

也许代替控制台尝试使用带有 JPasswordField 的对话框。这是来自 http://blogger.ziesemer.com/2007/03/java-password-dialog.html 的示例.

final JPasswordField jpf = new JPasswordField();
JOptionPane jop = new JOptionPane(jpf, JOptionPane.QUESTION_MESSAGE,
        JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = jop.createDialog("Password:");
dialog.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentShown(ComponentEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                jpf.requestFocusInWindow();
            }
        });
    }
});
dialog.setVisible(true);
int result = (Integer) jop.getValue();
dialog.dispose();
char[] password = null;
if (result == JOptionPane.OK_OPTION) {
    password = jpf.getPassword();
}
if (password != null)
    System.out.println("your password: " + new String(password));

关于java - 如何在不使用 System.console() 的情况下从控制台读取密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159762/

相关文章:

eclipse - 如何在控制台参数中而不是在 Eclipse 中为 ANT 设置 JRE

java - Netbeans GUI 生成器私有(private)成员

java - Volley deliverResponse 未被调用

java - Mustache.java 传递 json 字符串

java - Java 中的构造函数保证了哪些属性?

node.js - 如何在没有网络服务器(使用任何端口)的情况下运行 sails 控制台?

java - 从外部应用程序的屏幕获取数据

security - MVC 5 安全措施

security - Symfony2 - 从一个防火墙注销

c# - 调用位于另一个目录中的 DLL 文件