Диспетчер безопасности Java (странное поведение)

Я тестирую Java Security Manager в простом Java-приложении.

Я пишу свойства "user.home", "user.info" Я читаю свойства "user.home", "user.info"

Я устанавливаю файл политики, который разрешает чтение / запись в "user.home", "user.info". Я запускаю диспетчер безопасности.

Я все еще должен быть в состоянии читать / писать "user.home", "user.info", поскольку файлы политики дают разрешение.

Но я получаю исключение безопасности.

Что случилось?

Мой код Java

    import java.security.AccessControlException;

     public class TestSecurityManager {


final static String securityPolicyFile = "properties_permissions.policy"; 


public static void main(String[] args) {

    System.setProperty("user.info", "123456");
    System.out.println("user.info is : " + System.getProperty("user.info"));

    // Enable the security manager
    try {
        System.out.println("***");
        System.out.println("Setting policy file");
        System.out.println("***");
        System.setProperty(securityPolicyFile, securityPolicyFile);
        System.out.println("***");

        System.out
                .println("Security manager is STILL disabled, "
                        + "read/write access to \"user.info\" system property "
                        + "is allowed"
                        );
        System.out.println("***");
        System.setProperty("user.info", "123456");
        System.out.println("user.info is : " + System.getProperty("user.info"));
        //
        System.out.println("***");
        System.out.println("Setting Security manager");
        System.out.println("***");

        SecurityManager securityManager = new SecurityManager();
        System.setSecurityManager(securityManager);
    } catch (SecurityException se) {

    try {

        System.setProperty("user.info", "123456");
    } catch (AccessControlException acew) {

        System.out.println("!!!Write access to the user.info system property is not allowed!");
    }

    try {

        System.out.println("user.info is : " + System.getProperty("user.info"));
    } catch (AccessControlException acer) {

        System.out.println("Read access to the user.info system property is not allowed!");
    }

}
    }

Файл моей политики

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

ххх

1 ответ

Вы неправильно устанавливаете системное свойство политики безопасности. Так должно быть:

System.setProperty("java.security.policy", securityPolicyFile);

Если после настройки это все еще не работает, включите отладку с помощью -Djava.security.debug=policy Отметьте и проверьте, что файл читается правильно. Вы должны увидеть такую ​​строку:

политика: чтение файла:/path/to/your/properties_permissions.policy

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