Проблема SecurityManager со встроенным в SWT браузером Mozilla, работающим через Java WebStart (jnlp)
Я занимаюсь разработкой нестандартного приложения. По сути, это SWT-приложение, использующее встроенный браузер Mozilla (mozilla-interfaces-1.9.2.12.jar, mozilla-glue-1.9.2.12.jar), которое должно отображать HTML-страницы, содержащие апплеты (также разработанные мной). Эти апплеты подписаны, а сертификаты импортированы в хранилище ключей. При запуске апплетов в стандартном автономном браузере Mozilla все работает хорошо.
Даже при нормальном запуске моего SWT-приложения (я имею в виду автономное настольное Java-приложение без SecurityManager) все работает нормально - появляется встроенный браузер и отображает HTML-страницы с апплетами.
Тем не менее, я сталкиваюсь с проблемами, как только я пытаюсь запустить это приложение через Java Web Start (jnlp). Я полагаю, что мой jnlp четко определен, он содержит все теги, которые я смог найти в интернет-дискуссиях. Так есть например
<security>
<all-permissions/>
</security>
и т.д. Мое приложение SWT, соответственно. все его jar-файлы подписаны (тот же сертификат, что и для апплетов). Он запускается нормально, он выполняет операции, которые не будут разрешены без всех разрешений и подписи, он даже показывает окна SWT (таким образом, сам SWT работает нормально), но когда он должен показывать встроенный браузер, я получаю исключение UnsatisfiedLinkException. Забавно, что когда я создаю файл.java.policy с определенным набором разрешений, он начинает работать нормально, апплеты тоже работают. Играя роль Шерлока Холмса, я понял, что этот набор разрешений содержит
java.io.FilePermission
java.lang.RuntimePermission
+ permissions that are neccessary for applets.
Имеет ли это смысл для кого-либо из вас? Похоже, что браузер SWT Mozilla работает в каком-то особенном SecurityManager, который игнорирует тот факт, что само приложение подписано, а также есть тег в моем файле jnlp.
Когда я загружаю страницы без апплетов, все еще упоминалось о двух разрешениях, необходимых для отображения окна браузера вообще. Я хотел бы запустить это приложение без каких-либо файлов.java.policy и без дополнительных настроек на стороне пользователя. Я ценю каждый совет.
Заранее спасибо.
Войта
1 ответ
Не уверен, что та же проблема, потому что я никогда не использовал апплеты, но у меня также были проблемы при попытке запустить приложения на основе SWT-браузера с помощью xulrunner через webstart.
Одним из обходных путей для этого была установка политики внутри кода Java (непосредственно перед созданием экземпляра Browser...)
Policy.setPolicy(new Policy() {
public PermissionCollection getPermissions(CodeSource codesource) {
Permissions perms = new Permissions();
perms.add(new AllPermission());
return(perms);
}
public void refresh() { }
}
Я помню, что Windows XP все еще не могла запустить JNLP с этим. Но Windows 7, несколько версий Linux и Mac OS X могли.