Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringShell中屏蔽输入字符串_Java_Spring Boot_Terminal_Spring Shell_Jansi - Fatal编程技术网

Java 如何在SpringShell中屏蔽输入字符串

Java 如何在SpringShell中屏蔽输入字符串,java,spring-boot,terminal,spring-shell,jansi,Java,Spring Boot,Terminal,Spring Shell,Jansi,我使用的是SpringShell,我想在键入特定方法的密码字段时屏蔽输入 查看internet和论坛中的这里,我发现许多人建议使用console.readPassword()命令,但是,从IDE内部创建控制台会给我一个空结果 Scanner in= new Scanner(System.in) -------------------------------OR------------------------------------ BufferedReader in = new Buffered

我使用的是SpringShell,我想在键入特定方法的密码字段时屏蔽输入

查看internet和论坛中的这里,我发现许多人建议使用console.readPassword()命令,但是,从IDE内部创建控制台会给我一个空结果

Scanner in= new Scanner(System.in)
-------------------------------OR------------------------------------
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)
这些是我试图从用户那里获取输入的代码行,但我找不到屏蔽输入的方法,因此当有人键入密码时,它会显示在屏幕上

环顾四周,我发现为了使console命令正常工作,我可以使用外部终端而不是IDE,但是在启动SpringBoot(springshell项目)时,我得到了Jline警告:

“无法创建系统终端,正在创建哑终端(有关详细信息,请启用调试日志)。

那么,有没有一种简单的方法可以使用
scanner/BufferedReader
类屏蔽密码,或者我需要启用系统终端来使用控制台


谢谢

您可以使用jline库中的org.jline.reader.LineReader,这是Spring Shell应用程序中默认获得的

下面是一些示例代码:

import org.jline.reader.LineReader;

public class InputReader {

private static final Character DEFAULT_MASK = '*';

private Character mask;
private LineReader lineReader;

public InputReader(LineReader lineReader) {
    this(lineReader, null);
}

public InputReader(LineReader lineReader, Character mask) {
    this.lineReader = lineReader;
    this.mask = mask != null ? mask : DEFAULT_MASK;
}

public String prompt(String  prompt) {
    return prompt(prompt, true);
}

public String prompt(String  prompt, boolean echo) {
    String answer;
    if (echo) {
        answer = lineReader.readLine(prompt + ": ");
    } else {
        answer = lineReader.readLine(prompt + ": ", mask);
    }
    return answer;
}
}

然后,把它变成一个豆子:

@Bean
public InputReader inputReader(@Lazy LineReader lineReader) {
    return new InputReader(lineReader);
}
最后在你的应用程序中使用它:

@ShellComponent
public class YourShellComponent {

private final InputReader inputReader;

@Autowired
public YourShellComponent(InputReader inputReader) {
    this.inputReader = inputReader;
}

@ShellMethod(value = "connect")
public void connect() throws Exception {
    String username = this.inputReader.prompt("Username");
    String password = this.inputReader.prompt("Password", false);

    // other code
}
}