AccessControlException с классами апплета в той же кодовой базе

У меня есть три класса, один называется Capture, AppletLogging и AbstractJLabel. Я установил следующие разрешения в моем файле%USERPROFILE%/. Java.policy:

grant codeBase "file:/C:/project/abc/target/test-classes/-" {
  permission java.util.logging.LoggingPermission "control";
};

Все классы находятся в codeBase из гранта выше. Когда Capture вызывает статический метод в AppletLogging, все работает нормально. Когда AbstractJLabel вызывает тот же статический метод в AppletLogging, я получаю

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)

Это работает в обновлении 35 плагина java версии 6 для Sun. У кого-нибудь есть объяснение? Я получаю ту же ошибку, даже если я все следующие в блоке codeBase предоставления:

  permission java.security.AllPermission;

Обратите внимание, что Capture и AbstractJLabel вызывают статический метод из статического блока.

1 ответ

Оказалось, что проблема, с которой я столкнулся, заключалась в том, что всякий раз, когда я получал AccessControlException, поток, который был запущен, вызывался из Javascript. Позвольте мне объяснить, на странице, где размещен апплет, у меня есть ссылка на тег апплета. Можно вызывать общедоступные методы экземпляра класса Java-апплета из переменной Javascript, ссылающейся на тег апплета. В этом случае поток, даже если он выполняет код из апплета (или из jar-файла, содержащего основной класс апплета), не будет наследовать разрешение от базы кода апплета, поскольку вызов поступил извне. Решение состоит в том, чтобы вызвать код Java, который требует разрешения внутри AccessController.doPrivileged.

Другие вопросы по тегам