0

我有这段代码将 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)我没有发现任何看起来需要额外权限的东西,但是除了手动测试所有用法和功能之外,还有其他方法可以确认吗?

谢谢你。

4

1 回答 1

1

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

我怀疑这个doPrivileged电话是必要的。具有该名称和port参数的方法可能会尝试在ServerSocket. 如果该SecurityManager.checkListen方法不允许该操作,则后者将失败......在典型的沙箱中不会这样做。(我们通常不希望不受信任的代码能够启动隐形网络服务......)

于 2013-08-16T10:37:11.810 回答