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

时间:2011-02-22 16:51:05

标签: java security permissions osgi

我正在使用Apache Felix 2.0.8

我实现了一个扩展BasicPermission的自定义Permission,激活了安全管理器( -Djava.security.manager )并指定了我自己的策略文件( -Djava.security.file = “文件:C:\布拉布拉\ myfile.policy”

  • 从简单的独立测试(OSGi之外的一个简单主要方法)我断言,当我更改策略文件时,我的权限行为正确。一切都好。

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

  • 在我的OSGi包中,我注意到在主线程(在我的激活器的回调中)和我启动的其他线程中执行时,相同的代码示例都没问题。但是,只要从AWT-EventQueue线程执行,就始终允许相同的权限。

除了执行线程,我没有看到任何差异......

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

1 个答案:

答案 0 :(得分:1)

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