簡體   English   中英

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

[英]How to mask an input string in Spring-Shell

我正在使用 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
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM