我有这个代码将JavaServer附加到RMIRegistry,这是在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)
方法后面,我没有找到任何看起来需要额外权限的东西,但有没有办法确认,除了测试所有的用法和功能手?
谢谢。
答案 0 :(得分:1)
我认为没有(可靠的)简单方法。但是有一种不可靠的方法:暂时用只调用startServer
的内容替换该代码,并尝试在安全沙箱中运行它。
我怀疑需要doPrivileged
来电。具有该名称和port
参数的方法可能会尝试在ServerSocket
上创建/绑定/侦听。如果SecurityManager.checkListen
方法不允许操作,后者将失败...它不会在典型的沙箱中执行。 (我们通常不希望不受信任的代码能够启动隐形网络服务......)