0

У меня есть апплет, который подписывает файл с помощью сертификата с смарт-карты, что означает несколько дополнительных разрешений, необходимых для его работы: загрузка .dll как файла на локальном компьютере, создание файлов temp и т. Д. .Апплет AccessControlException только в «бизнес-методе»

Все задействованные банки подписаны и запущены как Java Web Start.

Я считаю запутанным, что когда полная логика вызывается из Init() метод, все работает отлично:

public void init() { 
    try { 
     File directory = new File("C:/Temp"); 
     deployPKCS11Library(directory); 

     testFullCycleOnApplet("C:/somefile.txt"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Если я возьму testFullCycleOnApplet из моего метода инициализации и запустить его на кнопку мыши после инициализации, Я получу:

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.io.tmpdir" "read") 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) 
at java.lang.System.getProperty(Unknown Source)... 

Есть ли метод init имеет больше прав для выполнения ограниченного материала? В JNLP файле я поставил

<security> 
    <all-permissions /> 
</security> 
+0

Добро пожаловать в Переполнение стека! Этот сайт посвящен многим языкам программирования. Добавьте подходящий язык, фреймворк или тег технологии на свои вопросы, чтобы получить соответствующие ответы. – Artemix

ответ

0

Там, кажется, готовый ответ на этот вопрос:

Does AccessController.doPrivileged give JavaScript threads the permissions of the signed Applet?

Основная причина у меня был другой профиль безопасности для отдельного вызова функции является то, что он был вызван из JavaScript! Таким образом, он работает хорошо, но это не очень хороший способ сделать это - скорее всего, вы будете делать некоторые вещи в привилегированном контексте.

@SuppressWarnings({ "unchecked", "rawtypes" }) 
public void testFullCycleOnApplet(final String fileName){ 
    AccessController.doPrivileged(new PrivilegedAction() { 
     public Object run() { 
      doFullCycleOnApplet(fileName); 
      return null; // nothing to return 
     } 
    }); 
}