我制作了一个java游戏,将高分保存在一个文件中,但我无法为程序提供足够的权限,使其在appletviewer下工作。
似乎appletviewer忽略了我的策略文件。
我将Game.java编译成Game.class,然后Game.html加载并运行小程序。在与它们相同的目录中,我有一个名为policy的策略文件,其中包含以下内容(由policytool创建)。
grant codeBase "file:///mypath/Game.html" {
permission java.security.AllPermission;
};然后,假设appletviewer允许您指定一个策略文件,如下所示:
appletviewer -J-Djava.security.policy=policy /mypath/Game.html但当我以这种方式启动游戏时,它只能读取highscore文件,而不能写入该文件:
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore write)此外,如果我在Finder中双击只包含上面一行appletviewer命令的shell脚本,那么它甚至没有读取权限:
Exception in thread "Thread-5" java.security.AccessControlException:
access denied (java.io.FilePermission highscore read)一个令人不安的迹象是,如果我给出一个不存在的文件的名称,而不是我的策略文件,那么我会得到相同的行为,没有额外的警告或错误:
appletviewer -J-Djava.security.policy=notafile /mypath/Game.html游戏本身(除了高分代码)在每种情况下都运行得很好,如果我在Eclipse下运行整个游戏,那么高分代码也运行得很好,即使Eclipse也使用appletviewer运行它。Eclipse还创建了一个与上面的文件非常类似的策略文件,我也从命令行尝试了这个文件,但它仍然不能从命令行运行。
尽管我使用的命令与http://docs.oracle.com/javase/tutorial/security/tour1/step3.html等各种教程中所示的完全相同,但appletviewer似乎并没有查看策略文件。
为什么appletviewer忽略我的策略文件?
发布于 2012-01-08 22:21:42
通过使用
grant codeBase "file:///mypath/Game.html" {
permission java.security.AllPermission;
};实际上,您尚未向类文件中的代码授予任何其他权限。
您可以尝试这样做:
grant codeBase "file:///mypath/-" {
permission java.security.AllPermission;
};这将向/mypath及其子文件夹中的所有类和jar文件授予AllPermission权限。-字符表示此权限适用于该文件夹中的所有类/jar文件,并且递归地应用于所有子文件夹中。如果你只想要一个文件夹,你可以使用*。
关于如何指定codeBase参数的完整参考在这里:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#FileSyntax。
发布于 2013-10-09 13:34:00
我在装有Java SE7的MacOS10.8.4上尝试了上述所有方法。Firefox和Safari。什么都不管用。
我试图打开一个内部html文件,调用一个打开文件的jar文件。
Safari甚至没有启动java,并且在Firefox中无法打开嵌套的文件(消息是找不到它,但我猜测浏览器不允许Java打开它)
我在终端中使用的是appletviewer,令人惊讶的是文件都打开了。
这些是非常复杂的交互机制的文件,我用Mathematica和JavaLive3D写的(大约12MB代码),我想我永远也看不到它们了,在MacPro上打开它们需要20分钟。
https://stackoverflow.com/questions/8777590
复制相似问题