Моя политика «отрицать все» не Причина SecurityException
в Eclipse RCP часть. Но работает правильно в простом испытании класса java - checkPermission
throws SecurityException
.Политика JAAS в Eclipse RCP
Я использую пользовательскую политику с помощью метода 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, я могу видеть " deny all " Строка в консоли. Итак, моя политика применяется в обоих случаях.