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". Вместо этого используйте один проверенный метод, который возвращает объект с возможностью выполнения привилегированных действий без дальнейших проверок безопасности (объектная возможность в жаргоне) Сделайте то же самое в верхних слоях кода.)

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