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

时间:2013-08-16 10:21:04

标签: java policy

我有这个代码将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)方法后面,我没有找到任何看起来需要额外权限的东西,但有没有办法确认,除了测试所有的用法和功能手?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

我怀疑需要doPrivileged来电。具有该名称和port参数的方法可能会尝试在ServerSocket上创建/绑定/侦听。如果SecurityManager.checkListen方法不允许操作,后者将失败...它不会在典型的沙箱中执行。 (我们通常不希望不受信任的代码能够启动隐形网络服务......)