我使用curl进行基于证书的/x509身份验证`
String command = "curl --cert " +certificateFilePath+" --key "+ certificateKeyFilePath+" --insecure "+authUrl;
ProcessBuilder process = new ProcessBuilder(command);
Process p;
try
{
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.print("result ------------------: "+result);
}catch(Exception e){
e.printStackTrace();
}`
但是获取异常`
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)`
假设应用程序和身份验证服务在Ubuntu上的docker-container中运行,当我手动进入应用程序docker-container并执行上面的curl命令时,它们工作得很好。请帮帮忙
发布于 2018-07-31 19:33:51
从流程构建器文档:
https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
正确的方法是使用作为单独字符串传递的参数来调用它,否则它将无法工作。此外,为了运行像linux中的curl或windows中的dir这样的系统命令,您需要将命令叫做解释器- sh。因此,您的命令应该类似于:
ProcessBuilder process = new ProcessBuilder("sh", "-c","curl","--cert", certificationPath......); 或者您可以尝试:
Runtime.getRuntime().exec(command); //Here you pass the whole command as a string 发布于 2018-07-31 20:17:43
您是否可以尝试在root或sudo java下运行JVM ...它可能没有足够的JVM权限。
https://stackoverflow.com/questions/51612350
复制相似问题