JAVA SecurityManager - настраиваемая BasicPermission с несколькими действиями
Я создал следующий файл политики:
grant {
permission StackPermission "use,save";
};
Чтобы получить к нему доступ, я запускаю свою JVM, используя следующие параметры:
-Djava.security.manager -Djava.security.policy=my.policy
Мой код выглядит так:
SecurityManager sec = System.getSecurityManager();
sec.checkPermission( new StackPermission( "use,save" ) );
Все отлично работает, но я хочу пойти немного более детально, не проверяя действие "сохранить":
sec.checkPermission( new StackPermission( "use" ) );
Кажется, что это не работает, даже если моя политика определяет как "использовать", так и "сохранять" в целом, что мне делать, чтобы обеспечить такую функциональность?
Большое спасибо, Влад
1 ответ
Обычно конструктор разрешений выпускается в трех вариантах: без аргументов, name
, а также name
а также actions
, У меня нет исходного кода для вашего StackPermissions
(Я предлагаю положить его в нестандартный пакет, кстати), но я предполагаю, что вы только что получили name
но относимся к этому как action
, Обидно, что Java позволяет перегружать конструкторы даже на arity.
Итак, поместите класс в именованный пакет и добавьте name
перед action
как в классе, так и в файле политики.
(В общем, я предлагаю как можно быстрее уйти от "Модели безопасности Java 2". Вместо этого используйте один проверенный метод, который возвращает объект с возможностью выполнения привилегированных действий без дальнейших проверок безопасности (объектная возможность в жаргоне) Сделайте то же самое в верхних слоях кода.)