Java中使用Scanner进行密码屏蔽

ljo96ir5  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(216)

我是一个学习Java的高中生,我想知道如何在Scanner中将输入文本自动更改为星号。这是我为一个项目制作的一个简单的登录系统。我的代码是

Scanner scan = new Scanner(System.in);

   boolean correctLogin = false;
   String username;
   String password;
   String enteredUsername;
   String enteredPassword;

   while(correctLogin != true){
       System.out.println("Enter Username: ");
       enteredUsername = scan.nextLine();

       System.out.println("Enter Password: ");
       enteredPassword = scan.nextLine();

       if(enteredUsername.equals("username") && enteredPassword.equals("passw00rd")){
           System.out.println("You have entered the correct login info");
           correctLogin = true; 
           break; 
       }
       else{
           System.out.println("Your login info was incorrect, please try again");
       }
   }

    System.out.println("You are now logged in, good job!");

我想让它在我键入密码时自动变成星号。

juzqafwq

juzqafwq1#

尝试使用以下命令读取密码:

Console console = System.console();
if(console != null){
  console.readPassword("Enter Password: ");
}
7xllpg7q

7xllpg7q2#

我的控制台java应用程序也遇到了同样的问题,出于安全原因,我也不想在IDE中显示密码。因此,为了找到bug,我不得不在生产环境中调试。以下是我在IntelliJ IDEA中的解决方案:

public static String getPassword() {

    String password;
    Console console = System.console();
    if (console == null) {
        password = getPasswordWithoutConsole("Enter password: ");
    } else {
        password = String.valueOf(console.readPassword("Enter password: "));
    }
    return password;
}

public static String getPasswordWithoutConsole(String prompt) {

    final JPasswordField passwordField = new JPasswordField();
    return JOptionPane.showConfirmDialog(
            null,
            passwordField,
            prompt,
            JOptionPane.OK_CANCEL_OPTION,
            JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION ? new String(passwordField.getPassword()) : "";
}
hivapdat

hivapdat3#

我不确定我是否正确地理解了你的问题,但我还是会尽力解释我所理解的。
为了确保你在用户界面上看到***,你需要有某种用HTML编写的用户界面。我认为在这种情况下,你是通过某种main方法在eclipse中运行你的代码。如果是这样的话,正如Vince提到的,**没有任何好处,因为字母会出现在控制台中。
我会建议的是寻找一些基本的网络应用教程,你会有更多的想法,它是如何工作的。
高温

相关问题