2016-07-15 11 views
2

私はスリングサーブレットを使用しています。その中で私は参考としてjavax.jcr.Sessionを使用しています。 、「カーディナリティ:ビルドを取って、私はシステム/コンソール/コンポーネントで見たとき、私は次のようなエラーに@Referenceセッションで不満足なエラーが表示されています

リファレンスセッション[「不満」、「 javax.jcr.Sessionサービス名を」見ている後 :1..1 "、"ポリシー:静的 "、"ポリシー オプション:嫌い "、"サービスがバインドされていません "]

どうすればこの問題を解決できますか?

答えて

4

javx.jcr.Sessionはサービスコンポーネントではないため、@Referenceで参照できません(http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#referenceを参照)。

あなたは現在のユーザーセッションが必要な場合は、このようなSlingHttpServletRequestオブジェクトからそれを抽出することができます。

Session session = slingHttpServletRequest.getResourceResolver() 
        .adaptTo(Session.class); 

あなたが別のユーザー(多分、「より良い」権限を持つ技術者)のセッションが必要な場合参照可能なサービスであるResourceResolverFactoryを使用することができます。

3

javax.jcr.Sessionはサービスではないため、@Reference注釈を挿入することはできません。

は、次の操作を行うことができ、セッションを取得するには - AEM 6.xで

を、あなたはこのようなコードを使用すると仮定されています。

/** 
* Gets the service resource resolver. 
* 
* @return resourceResolver. 
* @throws LoginException - exception if unable to login to repo. 
*/ 
public static ResourceResolver getServiceResourceResolver(ResourceResolverFactory resourceResolverFactory) throws LoginException { 
    final Map<String, Object> authParam = new HashMap(); 
    authParam.put(ResourceResolverFactory.SUBSERVICE, APPLICATION_READER_SUBSERVICE.value()); 

    return resourceResolverFactory.getServiceResourceResolver(authParam); 
} 

あなたは、なぜ彼は、サーブレットにおけるサービス・リソースリゾルバを取得する必要があります上記のアプローチのサンプル実装のhere

+0

を参照してくださいだろうか?応答オブジェクトには、独自のセッションバインドされたリソースリゾルバがあり、そのセッションからセッションを直接抽出できます。 –

+0

実際、ほとんどのユースケースでは、リクエストからのリソースリゾルバを使用してサーブレットでセッションを取得できます。 私の見解では、公開時にノードの操作を必要としないものは、スリングAPIを使用してセッションの必要なしに行うことができます。 公開するセッションには匿名ユーザーの権限があり、書き込み権限はありません。 CRUDやワークフローのセッションが必要な場合は、リソースリゾルバからのセッションを要求 –

+0

@AmeeshTrikhaから使用しないことをお勧めします。これは悪い習慣とみなされ、脆弱性を引き起こします。パブリッシュアクセスでは通常匿名であり、これには書き込みアクセス権がありません。また、作成者にはユーザーが認証されており、権限によって特定の領域に書き込むことができない場合は、これを却下してはいけません。管理または技術ユーザーセッションは、スケジュールされたジョブとイベントリスナーでのみ意味を持ちます。 – Thomas

関連する問題