在Java中结合commons cli和密码提示
我目前正在使用在Java中结合commons cli和密码提示,java,console,passwords,apache-commons-cli,Java,Console,Passwords,Apache Commons Cli,我目前正在使用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", tr
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)
}
出于显而易见的原因,我想从命令行中省略密码,因为它在历史记录和进程列表中都是可见的。但是,我的主程序需要命令行类型的对象。是否有任何方法可以解析具有与console.readPassword()类似行为的密码,甚至调用此函数并将其添加到命令行对象
我已经尝试搜索commons cli和密码解析的组合,但没有成功。虽然commons cli中似乎没有办法向
命令行
对象添加选项值,但您可以(希望)修改doSomething(cmd)
程序以从stdin读取
如果密码是在命令行上提供的,请接受它。如果没有,则动态读取标准输入
例如:
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);
}