无法执行简单的";whoami“;在服务器上使用java程序的unix命令

无法执行简单的";whoami“;在服务器上使用java程序的unix命令,java,unix,process,aix,Java,Unix,Process,Aix,我面临着这样一个奇怪的问题:无法在AIX服务器上执行简单的“whoami”unix命令。我有一个部署在AIX服务器上的webapplication。现在,我想看看我的Web应用程序当前运行的是哪个用户。因此,我添加了以下代码: public String whoami() throws Exception { Process p = Runtime.getRuntime().exec("whoami"); BufferedReader in = new B

我面临着这样一个奇怪的问题:无法在AIX服务器上执行简单的“whoami”unix命令。我有一个部署在AIX服务器上的webapplication。现在,我想看看我的Web应用程序当前运行的是哪个用户。因此,我添加了以下代码:

    public String whoami() throws Exception {
        Process p = Runtime.getRuntime().exec("whoami");
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        String output = "";

        while ((line = in.readLine()) != null) {
            //System.out.println(line);
            output += line;
        }
        in.close();
        p.destroy();
        return output;
    }
}
上面的代码被添加到由JSP引用的jar文件中。JSP必须接收上述代码的输出,并显示WAS用户名。但是当我在服务器上部署webapplication并尝试观察输出时,我收到一条错误消息,如

错误500:访问被拒绝(java.io.FilePermission execute)

但是,当我删除上面的代码并运行我的Web应用程序时,一切都正常运行。我在这里干什么。我错过做什么了吗?请帮忙。这是我第一次在UNIX上工作,只是出于好奇 您是否考虑过使用:

user.name 
Java中的系统属性?

只是出于好奇 您是否考虑过使用:

user.name 

Java中的系统属性?

AFAIK whoami是一个shell命令,并且
运行时#exec()
仅执行程序

您可以尝试
Runtime.getRuntime().exec(新字符串[]{“sh”,“-c”,“whoami”})
调用
sh
并让它执行
whoami


另一件事:阅读后是否需要销毁进程?

AFAIK whoami是一个shell命令,而
运行时#exec()
仅执行程序

您可以尝试
Runtime.getRuntime().exec(新字符串[]{“sh”,“-c”,“whoami”})
调用
sh
并让它执行
whoami


另一件事:阅读后是否需要销毁进程?

您可以使用
ProcessBuilder
类,而不是
getRuntime().exec(“whoami”)

下面是示例代码

import java.io.*;
导入java.util.*;
公共类DoProcessBuilder{
公共静态void main(字符串args[])引发IOException{

如果(args.length您可以使用
ProcessBuilder
类而不是
getRuntime().exec(“whoami”)

下面是示例代码

import java.io.*;
导入java.util.*;
公共类DoProcessBuilder{
公共静态void main(字符串args[])引发IOException{

如果(args.length看起来您的web服务器配置了禁止执行外部应用程序的Java安全策略

有关Java安全策略的信息以及web服务器的文档,请参阅

您需要提供(或编辑)一个策略文件以包含以下内容:

grant {
  permission java.io.FilePermission 
    "/usr/bin/whoami", "execute";
};

看起来您的web服务器配置了Java安全策略,禁止执行外部应用程序

有关Java安全策略的信息以及web服务器的文档,请参阅

您需要提供(或编辑)一个策略文件以包含以下内容:

grant {
  permission java.io.FilePermission 
    "/usr/bin/whoami", "execute";
};

嗯,它是一个实际的程序,它位于/usr/bin。
Martijn-Pro:~martijncourteaux$,whoami
返回
/usr/bin/whoami
嗯,它是一个实际的程序,它位于/usr/bin。
Martijn-Pro:~martijncourteaux$,whoami
返回
/usr/bin/whoami
我想这可能是实际的问题。威尔看看这个,谢谢你的帮助answer@SuryaChandra您发布的错误消息与受限安全策略完全一致。我在was.policy文件grant codeBase“文件:${application}{};grant codeBase”文件:${jars}{};grant codeBase“文件:${connectorComponent}{};grant codeBase”文件中看到以下条目:${webComponent}{};grant codeBase”文件:${ejbComponent}{};上述情况是否意味着当前没有任何访问权限?@SuryaChandra这似乎是WebSphere的默认设置。有关五个文件中哪一个最适合添加所需权限的信息,请参阅。类似于
文件:${application}
文件:${webComponent}
给我。我认为你是对的。我将进行更改并查看。不幸的是,我正在工作的服务器已关闭,我将立即更新我的观察结果。我想这可能是实际问题。我将检查并查看。谢谢你的帮助answer@SuryaChandra您发布的错误消息与受限安全策略完全一致。我看到was.policy文件grant codeBase“文件:${application}{};grant codeBase”文件:${jars}{};grant codeBase“文件:${connectorComponent}{};grant codeBase”文件:${webComponent}{};grant codeBase”文件:${ejbComponent}{};上述情况是否意味着当前没有任何访问权限?@SuryaChandra这似乎是WebSphere的默认设置。请参阅,了解五个选项中哪一个最适合添加所需权限的信息。类似于
文件:${application}
文件:${webComponent}
给我。我想你是对的。我会做出更改并查看。不幸的是,我正在工作的服务器已关闭,我将更新我的观察结果,因为
ProcessBuilder
应限制为与
运行时相同的安全策略。exec
a
ProcessBuilder
应限制为与
相同的安全策略>Runtime.exec