该文档完全没有帮助,《 OSGi in Action》没有提供有关如何做事的示例实例。例如,我希望捆绑软件A拒绝从捆绑软件B导入软件包,等等。简单的例子,从头到尾-我找不到它们。但是回到我的问题,出于明显的原因,我想阻止对System.exit的调用,除了“不要实现自己的安全管理器”之外,我从处女座论坛上得到的也很少,因此我的问题在这里。编辑由于我希望在处女座发生这种情况,因此我尝试了以下方法: public void start(BundleContext context) throws Exception { System.out.println("===== Starting Bundle PermissionsTest ====="); SecurityManager securityManager = System.getSecurityManager(); if(securityManager == null) throw new IllegalArgumentException("Security Manager is not defined!"); ServiceReference serviceReference = (ServiceReference) context.getServiceReference(ConditionalPermissionAdmin.class.getName()); if(serviceReference == null) throw new IllegalArgumentException(ConditionalPermissionAdmin.class.getName() + " IS NULL"); else System.out.println("===== Good so far 1 ====="); ConditionalPermissionAdmin conditionalPermissionAdmin = (ConditionalPermissionAdmin)context.getService(serviceReference); if(conditionalPermissionAdmin == null) throw new IllegalArgumentException("ConditionalPermissionAdmin can not be found"); else System.out.println("===== Good so far 2 =====");我在处女座中首先要做的就是启用Equinox Security Manager(因为这是处女座所使用的)。 OSGi的规范指出,每个容器都必须实现自己的安全管理器,并通过一系列OSGi特定操作进行扩展。对于处女座,这是Equinox Security Manager。启用它非常容易-只需在bin / dmk.sh中添加两行,就可以了。好的,所以我有ConditionalPermissionAdmin-很好!现在,例如,我可以添加一个安全检查,例如BundlePermission这样的Bundle。可以,但是对于捆绑包特定的操作(例如启动/停止/导出等)会发生这种情况。我似乎无法弄清楚如何为LifeCycle操作执行此操作-在我的情况下为System.exit。顺便说一句,我使用的是osgi-core的4.2.0版本,不是,我不能升级到4.3.0,至少现在不是。 最佳答案 System.exit由RuntimePermission(“ exitVm”,“ ”)控制,因此规范中的示例语法给出了DENY { ( java.lang.RuntimePermission "exitVm" "*" )}在Java代码中(尚未测试,请注意):ConditionalPermissionInfo info = admin.newConditionalPermissionInfo( "name", null, new PermissionInfo[] { new PermissionInfo( "java.lang.RuntimePermission", "exitVm", "*") }, ConditionalPermissionInfo.DENY);ConditionalPermissionUpdate update = admin .newConditionalPermissionUpdate();update.getConditionalPermissionInfos().add(0, info);update.commit();在"OSGi in Action"书中,该主题已得到很好的处理。请记住,规范的主要受众是规范的实施者,而不是最终用户。成员应该提供弥补这一差距的教育材料。后来的规范试图对最终用户更具教育意义。关于java - 是否可以通过ConditionalPermissionAdmin阻止对System.exit的调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12252397/