Spa*_*ker 19 java security passwords console
我点击了这个eclipse错误,那里System.console()没有Java应用程序启动.我有一个小型Java应用程序,它还需要输入一个只能在IDE中启动的密码.有没有其他方法可以从控制台安全地读取密码(意味着不在控制台上显示)只使用JDK类?
编辑:
 
我知道System.in,但这是在控制台中显示输入的字符,因此不安全.
编辑2:
 
我还想注意,可以在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));
Run Code Online (Sandbox Code Playgroud)
        如果System.console()返回null,则意味着就 Java 而言没有可用的控制台。  
您无法使用System.in,因为它很可能未连接到控制台。
即使可以,也没有可移植的方法来关闭 Java 中的回显。
您也许可以使用 Swing(或其他工具)弹出一个窗口来询问密码,但如果系统是无头的,则无法工作。
如果您准备做不可移植的事情,那么(在 Linux / UNIX 上)您可以尝试打开“/dev/console”或“/dev/tty”。然后你可以使用 termios 将 tty 驱动程序置于 noecho 模式。但您至少需要在本机代码中完成其中的一些操作。