Используйте AccessController . Вы можете обернуть все вызовы в блок AccessController.doPrivileged
.
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// privileged code goes here, for example, read and writing files.
...
return null; // nothing to return
}
});
Вы также можете, при необходимости, установить разрешения, которыми обладает ваше приложение, при запуске и использовать их позже:
Boolean flag = AccessController.doPrivileged(new PrivilegedAction() {
public Boolean run() {
boolean flag = false;
// privileged code goes here, for example, read and writing files. If it succeeds, set flag to true.
...
return flag; // return true, if the privileged action succeeded
}
});
Я бы рекомендовал использовать первый подход. Если вы используете второе, то сделайте переменную flag final по своей природе; поэтому вам необходимо выполнить любое «тестирование привилегий» в конструкторе класса, в котором хранится этот флаг.
Добавление
Фрагменты кода будут продолжать выдавать AccessControlException
с, если они встречаются. Если вы хотите продолжить обработку, не мешая пользователю, вам придется его ловить, устанавливая флаг в false. Блок AccessController.doPrivilege
существует для проверки наличия разрешения для текущего фрейма стека.
Приложение № 2
Использование AccessController.checkPermission
не рекомендуется, если только вы не можете гарантировать наличие диспетчера безопасности и соответствующего файла политики. В отсутствие диспетчера безопасности этот метод всегда генерирует исключение для проверки прав доступа, что нежелательно, если приложение не работает в качестве апплета.