У меня есть небольшой Java-апплет, и у меня есть раздражающая проблема. У меня есть подписан мой JAR с моим собственным хранилищем ключей с использованием инструмента jarsigner (после этих instructions).«java.security.AccessControlException: access denied», выполняющий подписанный Java-апплет
Java-апплет загружает подписанный JAR и пытается запустить его с расширенным классом URLClassLoader. Этот JAR пытается выполнить эту строку кода:
ClassLoader.getSystemClassLoader().getResource("aResource");
Он не может с большой трассировки стека завершившегося:
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1476)
at test.SecondJAR.main(SecondJAR.java:8)
(линия 8 из test.SecondJAR соответствует getResource(...)
метод
Когда запускается Java-апплет, пользователю предлагается принять сертификат, если он доверяет издателю:
Даже если я принимаю его, произошло исключение. Даже если я устанавливаю сертификат, и приглашение автоматически принимается, произошло исключение.
Я попытался тоже это:
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
ClassLoader.getSystemClassLoader().getResource("aResource");
return null;
}
});
И он терпит неудачу с тем же исключением.
Любая помощь будет оценена!
Вы, кажется, говорите, что исключение исходит из 'getSystemClassLoader' или' getResource', но трассировка стека говорит 'getContextClassLoader' (использование которого редко бывает хорошей идеей). Возможно, было бы полезно немного больше трассировки стека. –
Таким образом, исключение вызывается загруженным кодом. По умолчанию «URLClassLoader» будет использовать разрешения (через «ProtectionDomain»), подходящие для того, откуда был загружен код (политика одинакового происхождения). Это очень трудно понять. Вам действительно нужно это делать? По всей видимости, общая причина, по которой можно попробовать такие вещи, - это не продолжать подписывать код. Мобильный код должен быть подписан, чтобы быть доверенным по уважительной причине! –
@Tom У меня есть _Downloader Applet_, который получает сгенерированный JAR. этот JAR отличается каждый раз и отличается для каждого пользователя. Я должен загружать его каждый раз и выполнять его. второй JAR тоже подписан! должен существовать способ сделать это ;-( – logoff