gpt4 book ai didi

java - 如何在 Spring-Shell 中屏蔽输入字符串

转载 作者:行者123 更新时间:2023-12-02 04:50:48 31 4
gpt4 key购买 nike

我正在使用 Spring-Shell,并且我想在为特定方法输入密码字段时屏蔽输入。

在互联网和论坛中,我发现很多人建议使用console.readPassword()命令,但是从IDE内部创建控制台会给我一个空结果。

Scanner in= new Scanner(System.in)
-------------------------------OR------------------------------------
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)

这些是我尝试从用户那里获取输入的代码行,但我找不到屏蔽输入的方法,因此当有人输入密码时,它会显示在屏幕上。

环顾四周,我发现为了使控制台命令正常工作,我可以使用外部终端而不是 IDE,但是,在启动 SpringBoot(一个 Spring-Shell 项目)时,我收到 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:

@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
}
}

关于java - 如何在 Spring-Shell 中屏蔽输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442779/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com