gpt4 book ai didi

java - 在 Java 中结合 commons-cli 和密码提示

转载 作者:行者123 更新时间:2023-11-30 10:23:13 25 4
gpt4 key购买 nike

我目前正在使用 import org.apache.commons.cli

假设我有一个命令行解析器,例如:

private static commandLineParser(Options options, String[] strings) throws ParseException {
options.addOption("u", "username", true, "Login Username");
options.addOption("p", "password", true, "Login Password");
// Some other options
CommandLineParser parser = new DefaultParser();
return parser.parse(options, strings);
}

和我的主要功能:

public static void main(String args[]) {
Options options = new Options();
CommandLine cmd = null;
try {
cmd = commandLineParser(options, args);
//some helpFormatter stuff to make the options human-readable
} catch (ParseException e) {
e.printStackTrace();
System.exit(2);
}
//calling my main program
doSomething(cmd)
}

出于显而易见的原因,我想在命令行中省略密码,因为它在历史记录和进程列表中都是可见的。但是我的主程序需要一个 CommandLine 类型的对象。有什么方法可以解析具有与 console.readPassword() 类似行为的密码,甚至可以调用此函数并将其添加到 CommandLine 对象中?

我已经尝试搜索 commons-cli 和密码解析的组合,但没有成功。

最佳答案

虽然在 commons-cli 中似乎没有办法向 CommandLine 对象添加选项值,但您可以(希望)修改您的 doSomething(cmd) 从标准输入读取的程序。

如果密码是在命令行上提供的,请接受它。如果不是,请即时读取标准输入。

例如:

private void doSomething(CommandLine cmd) {
String username = cmd.getOptionValue("username");
char[] password = (cmd.hasOption("password"))
? cmd.getOptionValue("password").toCharArray()
: System.console().readPassword("Enter password for %s user: ", username);
}

关于java - 在 Java 中结合 commons-cli 和密码提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47171926/

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