如何在运行时将新的RuntimePermission添加到Java安全策略?

时间:2009-05-18 12:46:41

标签: java security permissions

我想在运行时将新的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 :(得分:0)

Permissions类型有一个非常奇怪的API,尽管你不能修改一个已设置为只读的对象也不足为奇。 ProtectionDomain应该是不可变的。

然而,由于大约1.4ish,你可以拥有符合当前ProtectionDomain的“动态”Policy。但是,尝试动态更改权限并不是我建议的,因为它没有多大意义。更好地使用功能方法创建API - SecurityManager只是关于错误API的裂缝。