Java 在OSGi中,我的权限在主线程中被拒绝,但在EDT线程中被允许

Java 在OSGi中,我的权限在主线程中被拒绝,但在EDT线程中被允许,java,security,permissions,osgi,Java,Security,Permissions,Osgi,我正在使用ApacheFelix2.0.8 我已经实现了扩展基本权限的自定义权限,激活了安全管理器(-Djava.security.manager)并指定了我自己的策略文件(-Djava.security.file=“file:c:\blablabla\myfile.policy”) 从简单独立测试(OSGi之外的一个简单主方法)中,我断言,当我更改策略文件时,我的权限行为正确。一切都很好。 公共静态void main(字符串[]args){ 试一试{ AccessController.ch

我正在使用ApacheFelix2.0.8

我已经实现了扩展基本权限的自定义权限,激活了安全管理器(-Djava.security.manager)并指定了我自己的策略文件(-Djava.security.file=“file:c:\blablabla\myfile.policy”)

  • 从简单独立测试(OSGi之外的一个简单主方法)中,我断言,当我更改策略文件时,我的权限行为正确。一切都很好。
    
    公共静态void main(字符串[]args){
    试一试{
    AccessController.checkPermission(新的MyPermission(“foo”);
    System.out.println(“OK”);
    }捕获(安全异常e){
    系统输出打印项次(“NOK”);
    }
    }
    

  • 在我的OSGi包中,我注意到,当在主线程(在我的activator的回调中)和我启动的其他线程中执行相同的代码示例时,它是可以使用的。但是,只要从AWT EventQueue线程执行,就始终允许使用相同的权限

除了执行线程,我看不出有任何区别


有没有人经历过类似的事情?

在OSGi中,框架不会查阅策略文件以获取捆绑包的权限。捆绑包的权限是通过ConditionalPermissionAdmin(和较旧的PermissionAdmin)服务设置的。作为引导,所有捆绑包都被授予AllPermission,直到某个捆绑包“断言”控制并设置捆绑包的权限。因此,在您通过ConditionalPermissionAdmin设置权限信息之前,所有捆绑包都是使用AllPermission运行的

public static void main(String[] args) { try { AccessController.checkPermission(new MyPermission("foo")); System.out.println("OK"); } catch (SecurityException e) { System.out.println("NOK"); } }