1

sling の userManager REST インターフェイスを使用してアプリケーションの管理 UI を構築しようとしていますが、json レンダリングをカスタマイズしたいと考えています。たとえば、「グループを取得」のレスポンスに、リクエスタがメンバーの場合のみメンバーを含めるようにしたいと考えています。

libs/sling/group/json.esp を追加することから始めましたが、デフォルトの応答を取得してカスタマイズする方法がわかりません。json を最初からクエリして形成する必要があったとしても、JCR/Sling からこのデータを取得するために使用できる API に関する情報はどこで見つけることができますか?

ResourceTraversor を使用してリソース オブジェクトを json 形式でダンプできることがわかりましたが、esp で new Packages.org.apache.sling.servlets.get.impl.helpers.ResourceTraversor(-1, 10000, resource, true) を使用するとスローアップしますエラー

4

2 に答える 2

2

ここで注意すべき点がいくつかあります。

まず、コードをlibsディレクトリの下に置かないようにする必要があります。アプリ コードはappsディレクトリの下にある必要があります。URI のサーブレットを解決しようとすると、Sling はチェックするapps前にチェックlibsするため、Sling で提供される機能を完全にオーバーライドする必要がある場合は、コードをapps.

2 つ目は、リクエスト時に (おそらく、設定方法によっては) 何が起こっているかということです。リクエストhttp://localhost:8080/system/userManager/group/administrators.tidy.1.jsonが Sling のデフォルトの GET サーブレットによって処理されているということです。これは、適用可能なスクリプトやサーブレットが他に見つからないためです。調査のために、デフォルトの get サーブレット のコードを調べて、org.apache.sling.servlets.get.impl.DefaultGetServletJSON のレンダリングに何を使用しているかを確認することをお勧めします。デフォルトの GET サーブレットとは異なる方法でユーザー グループのレンダリングを処理する必要がある場合は、タイプ のリソースの要求をリッスンするサーブレットを作成する必要がありますsling/group。この目的のためにサーブレットを作成し、OSGI に登録するのがおそらく理想的でしょう。 http://sling.apache.org/site/servlets.htmlサーブレットリゾルバーがサーブレットを確実に見つけるために設定する必要があるさまざまなプロパティを提供します。その後、サーブレットがリクエストを処理し、リクエストされたリソースに直接かつ簡単にアクセスできるようになります。

3 番目に、指定した特定のニーズは、要求しているユーザーが要求されたグループのメンバーでない限り、グループ メンバーをレンダリングしたくないということです。これは、レンダリングの問題というよりも、アクセス制御の問題です。Sling と Jackrabbit は、すぐに使用できるため、アプリケーションをどのようにセットアップするかについて、可能な限り前提を置いていません。そのため、特定のユース ケースに適用できるアクセス制御を確立する必要があります。Jackrabbit wiki ( http://wiki.apache.org/jackrabbit/AccessControl ) の Access Control に関する wiki 投稿では、これについてある程度説明しています。

于 2012-06-09T14:36:37.373 に答える
0

Paul Michelotti の回答からの指示を使用して、さらに調査し、問題に対する適切な解決策を見つけました。

Sling は、以下のような SCR アノテーションを介してリクエスト フィルター (javax.servlet.Filter) を受け入れます。

@SlingFilter(scope = SlingFilterScope.REQUEST, order = Integer.MIN_VALUE)

すべての要求は、サーブレットによって処理される前にフィルターに渡されます。resourceType を使用して、group.1.json と group/mygroup.1.json へのリクエストを区別することができました。フィルターは現在のユーザーにもアクセスできるため、セキュリティ モデルに準拠していない場合はリクエストを拒否し、404 ステータス コードを返すことができました。

フィルターについて詳しくはこちらのページをご覧ください。使用方法については、サンプル プロジェクトのurlfilterを確認することもできます。

于 2012-07-11T13:53:13.603 に答える