我正在使用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线程执行,就始终允许相同的权限。
除了执行线程,我没有看到任何差异......
有没有人经历过类似的事情?
答案 0 :(得分:1)
在OSGi中,框架不会查询策略文件以获取bundle的权限。捆绑包的权限通过ConditionalPermissionAdmin(和较旧的PermissionAdmin)服务设置。作为引导程序,所有bundle都被授予AllPermission,直到某些bundle“断言”控件并为bundle设置权限。因此,在通过ConditionalPermissionAdmin设置权限信息之前,所有捆绑包都在运行AllPermission。