Посмотрите на javodoc для RuntimePermission:
Этот класс для разрешения выполнения. A RuntimePermission содержит имя (также называемое «целевым именем»), но не список действий; у вас либо имеют именованное разрешение, либо нет.
Таким образом, действие «none» неверно в настройках вашего разрешения.
Что касается exitVM
разрешения:
Разрешения Target Name:. ExitVM {статуса выхода}
Что разрешение позволяет: приостановка виртуальной машины Java с указанным статусом выхода
Риски разрешения этого разрешения: Это позволяет злоумышленнику установить denia l-of-service, автоматически заставляя виртуальную машину остановиться. Примечание. Разрешение «exitVM. » автоматически предоставляется ко всему коду, загруженному из пути класса приложения, таким образом позволяет приложениям завершаться. Кроме того, разрешение «exitVM» эквивалентно «exitVM.».
Таким образом, действительный синтаксис для имени разрешения имеет либо «exitVM», «exitVM. *», «ExitVM.n» (где n обозначает код выхода).
Проблема здесь состоит в том, что, как указано в док, «exitVM. *» Разрешение автоматически предоставляется всем кодам, загруженным из класса приложения пути. Поэтому, если код, который вызывает System.exit (...), находится в основном пути к классам, который настроен в командной строке java, вы не можете помешать ему работать. Это не так, если, например, код, вызывающий System.exit (...), был загружен из отдельного загрузчика классов.
Также имейте в виду, что grant
заявление на предоставление разрешения, не отрицая их. В соответствии с этим единственный способ отклонить разрешение «exitVM» - , никогда не предоставляйте его.
Вы предоставляете разрешения, а не запрещаете их (в соответствии с этим API). Вероятно, вы не включили «SecurityManager». –