osx appletviewer下的java策略权限

时间:2012-01-08 12:42:08

标签: java command-line applet appletviewer

我制作了一个将高分保存在文件中的java游戏,但是我无法为程序提供足够的权限,使其能够在appletviewer下工作。

似乎appletviewer忽略了我的策略文件。

我将Game.java编译为Game.classGame.html加载并运行applet。在与这些目录相同的目录中,我有一个名为policy的策略文件,其中包含以下内容(使用policytool制作)。

grant codeBase "file:///mypath/Game.html" {
  permission java.security.AllPermission;
};

然后appletviewer可以让你指定一个像这样的策略文件:

appletviewer -J-Djava.security.policy=policy /mypath/Game.html

但是当我以这种方式开始游戏时,它只能读取高分文件,而不是写入它:

Exception in thread "Thread-5" java.security.AccessControlException:
                        access denied (java.io.FilePermission highscore write)

此外,如果我在只包含上面的单行appletviewer命令的shell脚本上双击Finder,那么它甚至没有读取权限:

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也创建了一个类似上面的策略文件,我也从命令行尝试过,但它仍然无法从命令行运行。

似乎appletviewer没有查看策略文件,尽管我正在使用完全如http://docs.oracle.com/javase/tutorial/security/tour1/step3.html等各种教程中所示的命令。

为什么appletviewer会忽略我的策略文件?

2 个答案:

答案 0 :(得分:3)

使用

grant codeBase "file:///mypath/Game.html" {
   permission java.security.AllPermission;
};

您实际上没有授予类文件中代码的任何其他权限。

您可以尝试这样做:

grant codeBase "file:///mypath/-" {
   permission java.security.AllPermission;
};

这会将AllPermission授予/ mypath及其子文件夹中的所有类和jar文件。 -字符表示此权限适用于该文件夹中的所有类/ jar文件,并且在所有子文件夹中递归。如果您只想要一个文件夹,则可以使用*代替。

有关如何指定codeBase参数的完整参考,请访问:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#FileSyntax

答案 1 :(得分:0)

我在使用Java SE7的mac OS10.8.4上尝试了以上所有内容。 Firefox和Safari。 没有任何效果。

我试图打开一个内部html文件,调用一个打开文件的jar文件。

Safari甚至没有启动java,在Firefox中无法打开嵌套文件(消息是找不到它,但我的猜测是浏览器不允许Java打开它)

我在终端中使用了appletviewer,而且所有文件都打开了。

这些是我用Mathematica和JavaLive3D编写的交互式机制的非常复杂的文件(大约12 MB代码),我想我再也看不到它了.... MacPro需要20分钟才能完成开。