Как добавить во время выполнения новую политику безопасности RuntimePermission в Java? - PullRequest
0 голосов
/ 18 мая 2009

Я хочу добавить во время выполнения новое RuntimePermission к файлу набора уже существующих разрешений ( java.policy ). Вот мой код:

ProtectionDomain domain = MyClass.class.getProtectionDomain();
        final PermissionCollection domainPerms = domain.getPermissions();
        Enumeration<Permission> oldPerms = domainPerms.elements();
        PermissionCollection newPerms = new Permissions();

        //add the old permissions to
        while (oldPerms.hasMoreElements()) {
            newPerms.add(oldPerms.nextElement());
        }
        //add my new permission
        RuntimePermission rtPermission = new RuntimePermission("accessDeclaredMembers");
        newPerms.add(rtPermission);

..

Но как мне использовать объект newPerms?

Также я попытался добавить новое разрешение к oldPerms, но поскольку oldPerms только для чтения, я получаю хорошее исключение SecurityException.

Спасибо!

1 Ответ

0 голосов
/ 18 мая 2009

Типы Permissions имеют очень странный API, хотя неудивительно, что вы не можете изменить объект, который был установлен только для чтения. ProtectionDomain s должны быть неизменными.

Тем не менее, начиная с 1.4ish, вы можете иметь «динамические» ProtectionDomain s, которые относятся к текущему Policy. Однако я не советую пытаться менять разрешения на лету, поскольку в этом нет особого смысла. Лучше создавать API-интерфейсы с подходом, основанным на возможностях - SecurityManager - это просто способ преодолеть трещины в плохих API.

...