我想在我的计算机上指定某些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?
答案 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()
方法来短路堆栈检查,并为自己提供所需的任何权限。当然,任何不受信任的代码都可以调用您的特权代码。