2013-06-19 3 views
0

Моя политика «отрицать все» не Причина 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 " Строка в консоли. Итак, моя политика применяется в обоих случаях.

ответ

0

Не удалось применить политику JAAS в RCP. Закончено с использованием грязного взлома: бросает AccessControlException прямо с места, где Policy возвращает false.

Пример:

public class MyPolicy extends java.security.Policy { 
    public boolean implies(ProtectionDomain domain, Permission permission) { 
     ... 
     System.out.println("deny all"); 
     throw new AccessControlException("Access denied"); 
     return false; 
    } 
}