2017-10-18 7 views
0

現在のバンドルに含まれていない他のバンドルのプロパティにアクセスすることを含むユースケースを作成しています。これを実現するには、現在のAEMバンドル(AEM 6.2)のアクセス許可を変更する必要があります。私は、OSGiサービスのConditionalPermissionAdminが今後の道だと考えています。OSGI ConfigurationAdminがnullです。AEMでgetServiceReferenceを使用して取得しています。

アプローチリファレンス:http://moi.vonos.net/java/osgi-security/

私はConditionalPermissionAdminを取得する予定で以下のコードを、持っていますが、 この常にnullいくつかの未知の理由。

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

hereが示唆されているように、この低レベルAPIは、最善のアプローチではありません。しかし、私は、宣言的サービスのアプローチの許可については不明です。

ヘッドアップ - >私はOSGiの概念と実装が初めてです。

参照:OSGiのに一般

+0

1.どのAEMバージョンをお使いですか? 2.あなたのユースケースを詳しく教えてください。ユーザーベースのアクセス許可が機能しないのはなぜですか? –

+0

@AhmedMusallam - 私はAEM 6.2です。私はユースケースで説明を更新しました。ユーザーベースのアクセス許可は、コンテンツに関連するものではなく動作します。 – phemanthkumar28

+0

「他のバンドルのプロパティにアクセスする」とは何を意味していますか?あなたは何にアクセスしようとしていますか? OSGIの設定? –

答えて

2

は、私が見つけたものです:

felix framework security documentationは、インストールする必要があることを示唆していますAEMにデフォルトでインストールされていませんorg.apache.felix.framework.securityバンドルは、(少なくとも私のバニラ6.3インスタンスを見て)

それはフェリックスのサブプロジェクトでは、「Frameworkのセキュリティ」の下にリストされています

は、インストールページ:http://felix.apache.org/downloads.cgi#subprojects

問題があるということですOSGIの実装はありませんをインスタンスに追加します。それで、あなたはfelixセキュリティバンドルが必要です。

+0

素晴らしいです。これが成功した理由は、実際にConditionalPermissionAdminに関連する実装の欠落に関連していました。 'org.apache.felix.framework.security'バンドルをインストールするだけで、魔法のように動作しました。これはAEM 6.2でも欠けていました。 – phemanthkumar28

3

は、サービス参照が(まだ)利用できない可能性があります。 したがって、現在のサービス参照を取得することは、タイミング問題のために失敗する可能性が非常に高いです。

有効な低レベルのアプローチの1つは、ServiceTrackerを開始し、サービスが利用可能になったときに反応することです。しかし、これはかなり困難です。

あなたがすでにDSを使用していることは、最高の推奨アプローチです。ここでは、私は完全にユースケースを理解していないと、なぜサービス利用者や一般的なユーザーベースのアクセスは動作しませんにもかかわらず

+0

この問題は、ConditionalPermissionAdminの実装の欠落に関連していたためです。それは欠けている 'org.apache.felix.framework.security'バンドルをインストールすることで解決されているので、今度はDSを使って同じことを実装できます。 – phemanthkumar28

+0

ConditionalPermissionAdminの実装は、もちろん重要な第一歩です!しかし、クリスチャンが指摘している問題は依然として存在します。実装がインストールされている場合でも、サービスが利用可能になる順序を予測したり強制したりすることはできません。したがって、単一の時点でサービスを要求しただけの場合は、サービスが存在しないためnullになる可能性があります*まだ*。これが、DSが推奨される理由です。 –

関連する問題