разрешения политики Java под OSX appletviewer - PullRequest
1 голос
/ 08 января 2012

Я создал 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

Но когда я запускаю игру таким образом, она может только читать файл рекордов, но не записывать в него:

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

Кроме того, если я дважды щелкну вПоиск сценария оболочки, содержащего только одну команду appletviewer, описанную выше, затем он даже не имеет разрешения на чтение:

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

Один тревожный признак состоит в том, что если я дам имя несуществующему файлувместо моего файла политики, я получаю то же поведение без дополнительных предупреждений или ошибок:

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

Сама игра (за исключением кода с высокими показателями) отлично работает в каждом случае, и высокая-score код также работает нормально, если я запускаю все это под Eclipse, хотя Eclipse также запускает его с помощью appletviewer.Eclipse также создает файл политики, очень похожий на приведенный выше, который я также пробовал из командной строки, но он все равно не работал из командной строки.

Кажется, что appletviewer не смотрит нафайл политики, хотя я использую команду именно так, как показано в различных руководствах, таких как http://docs.oracle.com/javase/tutorial/security/tour1/step3.html.

Почему appletviewer игнорирует мой файл политики?

Ответы [ 2 ]

3 голосов
/ 08 января 2012

Используя

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

вы фактически не предоставили никаких дополнительных разрешений для кода в файле класса.

Вы можете попробовать сделать это вместо:

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

Это предоставит AllPermission всем файлам классов и jar в / mypath и его подпапках. Символ - указывает, что это разрешение применяется ко всем файлам class / jar в этой папке и рекурсивно во всех подпапках. Если вам нужна только одна папка, вы должны использовать *.

Полная информация о том, как указать параметр codeBase, приведена здесь: http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#FileSyntax.

0 голосов
/ 09 октября 2013

Я попробовал все вышеперечисленное на Mac OS10.8.4 с Java SE7. Firefox и Safari. Ничего не сработало.

Я пытался открыть внутренний html-файл, вызывая jar-файл, который открывал файл.

Safari даже не запустил java, и в Firefox не удалось открыть вложенный файл (сообщение было о том, что он не был найден, но я предположил, что браузер не позволяет Java открывать его)

Я использовал вместо этого appletviewer в терминале, и все файлы открылись удивительным образом.

Это очень сложные файлы интерактивного механизма, которые я написал (примерно 12 МБ кода) для Mathematica и JavaLive3D, и я подумал, что никогда больше их не увижу .... На MacPro требуется 20 минут, чтобы открыт.

...