Java 是否有一种简单的方法来调查是否真的需要AccessController.doPrivileged()?

Java 是否有一种简单的方法来调查是否真的需要AccessController.doPrivileged()?,java,Java,我有一段代码,它将JavaServer附加到RMI注册表,这是在PrivilegedAction中完成的 //start javaengineserver AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try {

我有一段代码,它将JavaServer附加到RMI注册表,这是在PrivilegedAction中完成的

        //start javaengineserver
        AccessController.doPrivileged(new PrivilegedAction() 
        {
            public Object run() 
            {
                try
                {
                    startServer(port, getSession());
                } catch (RmiException e) 
                {
                    e.printStackTrace();
                    AWTSwingErrorDialog.show(e, "Error while attaching JavaEngineServer to rmiregistry.exe");
                }
                return null;
            }
        });
我发现了一些关于
doPrivileged
方法的其他问题,他们都说有些命令需要额外的权限,比如获取环境变量

因此,我查看了startServer(port,session)方法后面的代码,没有发现任何看起来需要额外权限的内容,但是除了手动测试所有用法和功能之外,还有什么方法可以确认这一点吗

谢谢。

我认为没有(可靠的)简单方法。但有一种不可靠的方法:暂时用只调用
startServer
的代码替换该代码,然后尝试在安全沙箱中运行它


但是我怀疑需要调用
doPrivileged
。具有该名称和
端口
参数的方法可能会尝试在
服务器套接字
上创建/绑定/侦听。如果
SecurityManager.checkListen
方法不允许该操作,则后者将失败。。。这在一个典型的沙箱中是做不到的。(我们通常不希望不受信任的代码能够启动隐形网络服务…

非常感谢!实际上,该方法调用绑定xor或RMI注册表的重新绑定方法。我尝试在没有doPrivileged()方法的情况下启动它,但似乎一切都正常。。。根据SecurityManager和RMI.bind,我发现了一些问题,但通过调用具有特权访问权限的bind方法,这些问题似乎都没有得到解决。。。有些东西告诉我它是需要的,但是没有它它它运行得很好。@Oli-在幕后,那些RMI方法可能会进行serversocket绑定。或者,可能存在与RMI相关的特定许可。不管怎样,我想都有可能进行安全检查。如果您没有看到,请检查您正在使用的沙箱的策略设置。好的,那么如果策略设置足够严格,操作将在没有DoPrivileged的情况下失败?