如何授予网站的applet AllPermission权限?

时间:2010-05-13 15:34:39

标签: java applet policy permissions grant

我想在我的计算机上指定某些applet与java.security.AllPermission一起运行(用于调试和安全测试)。但是,我不想启用我运行的所有小程序以获得此权限。因此,编辑我的用户Java策略文件(我通过测试确保了正确的策略文件),我尝试将此值:

grant codeBase "http://host_where_applet_lives/-" {
 permission java.security.AllPermission;
};

当applet尝试执行强大的操作时,此值会失败(在我的情况下创建一个新的Thread)。但是,当我输入以下值时:

grant {
 permission java.security.AllPermission;
};

小程序能够执行强大的操作。唯一的区别是缺少codeBase属性。

这里提到的类似问题的答案[1]似乎暗示(但从未表明或证明)可能需要AccessController.doPrivileged()次电话。对我来说,这听起来不对,因为当我向所有applet授予权限时,我不需要那个调用(我展示的第二个例子)。即使这是一个解决方案,使用AccessController.doPrivileged()调用运行的applet乱丢也不容易或必然。最重要的是,我的测试显示这无论如何都不起作用。但我很高兴能听到更多关于它的想法。

[1] Can't get AllPermission configured for intranet applet. Can anyone help?

1 个答案:

答案 0 :(得分:1)

您引用的similar question的答案表明,从JavaScript调用Java applet代码可能会导致SecurityException,因为AccessController会执行stack inspection并因为不受信任的JavaScript。我尝试了代码,果然,Firefox不会在没有doPrivileged()调用的情况下运行JavaScript调用的applet,但Safari会(至少在Mac OSX上)。

如果您使用JavaScript调用applet,则可以尝试使用Applet.paint()方法自动调用applet。或者,您可以使用doPrivileged()方法来短路堆栈检查,并为自己提供所需的任何权限。当然,任何不受信任的代码都可以调用您的特权代码。