如何在Java中自动回答用户提示?

3

我正在使用一个编译好的Java文件,需要一个文件名作为参数,并通过用户输入要求用户名和密码。我试图从一个shell脚本中自动化这个过程,但是遇到了问题。由于无法访问Java代码,所以我遇到了麻烦。
因此,代码的调用方式如下:

java javaprogram /home/user/securityfile

所以,你传递文件后,它会要求输入用户名和密码。输入后,就完成了。

现在,我尝试将用户输入放入文件中并传递,但是出现错误。

java javaprogram /home/user/securityfile < userinputfile

用户输入的文件包含以下文本(第一行是用户名,第二行是密码):

MattSmith
MSpassword136

有没有人有什么想法?也许我做错了什么?

这是错误信息:

Exception in thread "main" java.lang.NullPointerException at ilex.util.UserAuthFile.main(UserAuthFile.java:297) 

谢谢


1
如果您只是想弄清楚Java程序在做什么,也许可以尝试反编译它?或者,既然听起来这是一个Linux系统,您可以尝试使用strace来查看它与控制台的交互方式。请注意,任何安全地在控制台上读取密码的机制都无法使用管道;您可能需要一个pty。 - Daniel Pryden
谢谢提供的建议,我现在正在查看 strace。我已经尝试在“<”前添加了一个 0,但是没有解决问题。我将继续研究这个问题。 - jonesy19
1
尝试使用(echo "user"; sleep 1; echo "password") | java javaprogram /home/user/securityfile。如果可以工作,您可以进行重构以从文件中读取,而不需要太多的工作。 - LMC
1
也许该应用程序永远不会从 System.in 读取,因为它需要交互式控制台 System.console()。这里有一些信息 链接 - LMC
1
请参考这个问题 - LMC
显示剩余10条评论
1个回答

2

尝试使用以下命令:(echo "user"; sleep 1; echo "password") | java javaprogram /home/user/securityfile

如果这个命令可以正常运行,您就可以进行重构以便从文件中读取信息。如果无法正常运行,可能是因为该应用程序需要交互式控制台System.console(),因此永远不会从System.in读取数据。有关详细信息,请参考此处


2
你说得对,我从一开始就注定要失败。它正在使用System.console()。感谢你的帮助。 - jonesy19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接