Java System.setSecurityManager() плохо работает с файлом политики

Я ожидал, что при использовании System.setSecurityManager() + файл политики, он должен работать.

Здесь у меня есть проект intelliJ со структурой файла / каталога, подобной этой:

--src
    --main
       --java
           --TestPrinciple.java
       --resources
           --demo.policy

И тогда мой код:

public class TestPrincipal {
    public static void main(String[] args) {
        System.setProperty("java.security.policy", "demo.policy");
        System.setProperty("java.security.auth.login.config", "demo.config");
        System.out.println(System.getProperty("java.home"));
        System.setSecurityManager(new SecurityManager());
    }
}

В то время как demo.policy это:

grant  {
    permission java.util.PropertyPermission "java.home", "read";
};

Он работает с исключением:

Exception in thread "main" java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.security.policy" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.System.setProperty(System.java:792)
at TestPrincipal.main(TestPrincipal.java:6)

1 ответ

Решение

Предположительно demo.policy не позволяет классам разрешений устанавливать системные свойства.

Стоит также отметить, что код устанавливает конфигурацию для менеджера безопасности после инициализации менеджера безопасности.

Простое решение - установить менеджер безопасности последним.

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