2017-10-18 116 views
0

我正在研究涉及訪問不屬於當前包的其他包的屬性的用例。爲了實現這一點,我必須修改當前AEM捆綁包(AEM 6.2)的權限。我看到OSGi服務的ConditionalPermissionAdmin是前進的方向。在使用AEM中的getServiceReference進行檢索時,OSGI ConfigurationAdmin爲空

方法參考:http://moi.vonos.net/java/osgi-security/

我有下面的代碼,即打算取回ConditionalPermissionAdmin但 一些未知的原因,這總是空。

public class Activator implements BundleActivator { 

    private static final Logger LOG = LoggerFactory.getLogger(Activator.class); 

    private ConditionalPermissionAdmin conditionalPermissionAdmin; 

    @Override 
    public final void start(final BundleContext bundleContext) { 
    try { 
     conditionalPermissionAdmin = getConditionalPermissionAdmin(bundleContext); 
     if (conditionalPermissionAdmin != null) { 
      LOG.info("{0} conditionalPermissionAdmin ", conditionalPermissionAdmin.getClass()); 
      /* pseudocode */ 
     } 
     LOG.info("{0} started", bundleContext.getBundle().getSymbolicName()); 
    } catch (Exception ex) { 
     LOG.error(ex.getMessage()); 
    } 
    } 

    private ConditionalPermissionAdmin getConditionalPermissionAdmin(BundleContext context) throws BundleException { 
    ServiceReference ref = context.getServiceReference(ConditionalPermissionAdmin.class.getName()); 
    ConditionalPermissionAdmin permissionAdmin = null; 
    if (ref != null) { 
     permissionAdmin = (ConditionalPermissionAdmin) context.getService(ref); 
    } 
    return permissionAdmin; 
    } 

    @Override 
    public final void stop(final BundleContext bundleContext) { 
    LOG.info("{0} stopped", bundleContext.getBundle().getSymbolicName()); 
    } 
} 

enter image description here

我看不出有任何編譯或運行時的問題。即使是捆綁狀態良好。

Bundle Status

這種低級別的API是不是最好的方法的建議here。但我不確定聲明式服務方法的許可。

單挑 - >我是OSGi的新概念和實現。

參考文獻:

+0

1.您的AEM版本是什麼?你能詳細說明你的用例嗎?以及爲什麼基於用戶的權限不起作用? –

+0

@AhmedMusallam - 我在AEM 6.2上。我用這個用例更新了描述。基於用戶的權限不起作用,因爲這不是與內容相關的內容。 – phemanthkumar28

+0

當你說「訪問其他包的屬性」是什麼意思?你想要訪問什麼? OSGI配置? –

回答

2

即使我不完全瞭解使用情況,以及爲什麼在一般的業務用戶或基於用戶的訪問是行不通的,這裏是我發現:

felix framework security documentation建議你需要安裝org.apache.felix.framework.security束,這是默認情況下不AEM安裝(至少在看我的香草6.3實例)

它在菲利克斯子項目下的「框架安全」上市頁安裝:http://felix.apache.org/downloads.cgi#subprojects

的問題是,有沒有OSGI的實現在您的實例中。這就是爲什麼你需要felix安全套件。

+0

太棒了。這工作,其原因確實與相關的ConditionalPermissionAdmin相關的丟失實現有關。安裝'org.apache.felix.framework.security'包就像魔術一樣工作。 AEM 6.2中也缺少這一點。 – phemanthkumar28

3

一般在OSGi的有可能是一個服務引用(還)沒有提供。 因此,簡單地獲取當前服務引用很可能因時間問題而失敗。

一個有效的低級別方法是啓動ServiceTracker並在服務可用時作出反應。儘管這樣做很難做到。

因此,您已經聽說使用DS是最好的和推薦的方法。

+0

因爲該問題與ConditionalPermissionAdmin的缺失實現有關。由於通過安裝缺少的'org.apache.felix.framework.security'包解決了這個問題,我現在可以使用DS來實現相同的工具。 – phemanthkumar28

+0

ConditionalPermissionAdmin的實現當然是重要的第一步!但是基督教徒指出的問題依然存在......即使你安裝了一個實現,你也無法預測或執行服務可用的順序。因此,如果您只是在某個時間點請求服務,則可能會因爲該服務不存在而爲空。這就是推薦DS的原因。 –

相關問題