2013-06-19 37 views
0

我的“拒绝所有”策略确实是而不是导致Eclipse RCP部分中的SecurityException。但在普通的java类测试中正常工作 - checkPermission会抛出SecurityExceptionEclipse RCP中的JAAS策略

我正在使用自定义策略和implies方法。它否认所有有主体的主体。检查在一些RCP ViewPart中的doAs内完成。

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,我可以看到“拒绝所有“控制台中的字符串。所以,我的政策适用于这两种情况。

回答

0

没有成功使JAAS策略在RCP中正常工作。用肮脏的黑客解决方法完成:从政策返回错误的地方投掷AccessControlException

实施例:

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; 
    } 
}