我的“全部拒绝”政策不会导致Eclipse SecurityException
RCP 部分。但是在普通的 java 类测试中可以正常工作 - checkPermission
throws SecurityException
。
我正在使用带有implies
方法的自定义策略。它拒绝所有具有任何主体的主体。检查是doAs
在一些 RCP ViewPart 内部完成的。
查看部分。 设置我的策略,使用主体创建主题,为该主题运行 doAs 并检查权限:
public class MyPart extends ViewPart {
public void createPartControl(Composite parent) {
Policy.setPolicy(new MyPolicy());
Subject subject = new Subject();
subject.getPrincipals().add(new Principal() {
public String getName() {
return "MyPrincipal";
}
});
Subject.doAs(subject, new PrivilegedAction<Object>() {
@Override
public Object run() {
try {
AccessController.checkPermission(new MyPerm("abc"));
}
catch(SecurityException e) {
e.printStackTrace();
}
return null;
}
});
}
}
政策。 拒绝对主体的所有操作的策略:
public class MyPolicy extends java.security.Policy {
public boolean implies(ProtectionDomain domain, Permission permission) {
if (domain.getPrincipals().length == 0) {
//not inside of doAs
return true;
}
System.out.println("deny all");
return false;
}
}
简单的测试许可:
public class MyPerm extends Permission {
public MyPerm(String name) {
super(name);
}
public boolean implies(Permission permission) {
return false;
}
public boolean equals(Object o) {
return false;
}
public int hashCode() {
return 0;
}
public String getActions() {
return null;
}
}
在普通的 java 类测试和 Eclipse RCP 中,我都可以在控制台中看到“全部拒绝”字符串。因此,我的政策适用于这两种情况。