Java: вызов .dll из локального апплета ... я делаю что-то не так - PullRequest
1 голос
/ 15 сентября 2010

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

И все же я получаю:

java.security.AccessControlException: доступ запрещен (java.lang.RuntimePermission loadLibrary.jzmq)

когда мое приложение пытается позвонить

static{
     System.loadLibrary("jzmq");
}

Что дает?Чего мне не хватает, чтобы он работал без проблем с безопасностью (как и должно быть, так как это локальный апплет, установленный пользователем)?

Кстати, он отлично работает в Eclipse "Run", но не в браузерегде я хочу его запустить.

1 Ответ

2 голосов
/ 15 сентября 2010

Апплеты, запускаемые через плагин браузера из локальной файловой системы (file: ///), подвергаются практически таким же проверкам безопасности, что и апплеты, загружаемые из Интернета. Разница в том, что апплеты, загруженные из Интернета, имеют разрешение «позвонить домой», т.е. подключитесь к серверу, с которого был создан апплет, и апплеты, загруженные из файловой системы, имеют право доступа к файлам в той же папке.

Песочница по умолчанию не позволяет загружать собственные библиотеки в любом случае.

Вы можете рассмотреть вопрос о подписании апплета. Пользователь должен будет подтвердить диалог безопасности. И если у вас нет сертификата для подписи кода, приобретенного в центре сертификации, диалоговое окно будет предупреждать пользователя о том факте, что он не подписан доверенной стороной.

Я не совсем понял ваш вариант использования, но если вы можете запустить другой код на локальном компьютере, вы всегда можете изменить политику безопасности Java, чтобы доверять файлу .jar в каком-то определенном локальном местоположении. Таким образом, диалог безопасности не отображается.

Чтобы сделать это, вы изменяете файл политики java, который на Windows-машине с Java 6, вероятно, будет в:

% ПРОГРАММНЫЕ ФАЙЛЫ% \ Java \ jre6 \ lib \ security \ java.policy

И добавьте новое разрешение, примерно так:

grant codeBase "file:///path/yourcomponent.jar" {
      permission java.lang.RuntimePermission "loadLibrary.jzmq";
};

РЕДАКТИРОВАТЬ: Чтобы дать полные разрешения, вы можете добавить разрешение, как это (это скопировано из успешного теста, который я только что сделал):

grant codeBase "file:///C:/component/policytest.jar" {
      permission java.security.AllPermission;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...