2013-10-21 36 views
0

我想在我的應用程序中使用conditional permissions,在卡拉夫運行。該代碼是從書的OSGi在行動的摘錄(見full policy example),並歸結爲:OSGi安全與Apache卡拉夫:沒有服務ConditionalPermissionAdmin找到

ConditionalPermissionAdmin permAdmin = getConditionalPermissionAdmin(context); 
ConditionalPermissionUpdate update = permAdmin.newConditionalPermissionUpdate(); 
List infos = update.getConditionalPermissionInfos(); 
infos.clear(); 

infos.add(permAdmin.newConditionalPermissionInfo(
     "All permissions", 
     new ConditionInfo[]{ 
      new ConditionInfo(
      BundleLocationCondition.class.getName(), 
      new String[]{FrameworkUtil.getBundle(this.getClass()).getLocation()}) 
     }, 
     new PermissionInfo[]{ 
      new PermissionInfo(AllPermission.class.getName(), "*", "*") 
     }, 
     ConditionalPermissionInfo.ALLOW)); 
update.commit(); 

然而,沒有ConditionalPermissionAdmin服務似乎是由Karaf進行登記,因爲我看的時候得到一個null服務引用爲了它。

卡拉夫安全層有問題嗎?我如何激活它?

回答

1

Karaf沒有什麼問題,因爲你最有可能使用Karaf,你很可能也使用了Felix框架。對於Felix,您需要部署額外的org/apache/felix/org.apache.felix.security/1.4.0/org.apache.felix.framework.security-1.4.0.jar = 1。 (最有可能更新的版本也是需要的;-)) Equinox帶有這個已經啓用。 看到更多的在my blog

+0

好猜:我在引擎蓋下使用菲利克斯。我添加了'mvn:org.apache.felix/org.apache.felix.framework.security'到我現有的功能,就像一個魅力! 當我啓動它時,我收到了一個ClassNotFound異常'PermissionAdmin沒有被org.apache.aries.jmx.core找到'。任何想法可能來自哪裏? –

+0

我想知道aries核心包的刷新是否已經解決了這個問題,如果是這樣的話,請確保在早期階段(低級startlevel)配置的startup.properties中有permissionsadmin包。 –

相關問題