3

私たちが解決しようとしているタスクは、HttpService.registerResources()メソッドCache-Controlを使用して OSGi 環境で公開される静的リソース (例: )のカスタム応答ヘッダーを設定することです。

次の詳細を考慮して、この目標を達成するための最善の方法は何ですか?

  • 「リソース」サービスのセットに基づいて、多数のリソース登録が存在する可能性があります。これらの OSGi サービスは、それらが存在する静的リソース パスとバンドルに関する情報を提供します。リソース パスの登録数は、50 から 200 の間であると予想されます。
  • 実装は OSGi フレンドリーであるべきです。Pax Web 拡張機能の使用は許容されます。
  • 実装は Web サーバーに依存しない必要があります (たとえば、Jetty に関する直接的な知識がない場合)。

私たちが考えている解決策は次のとおりです。

  1. HttpContext.handleSecurityで応答ヘッダーを設定する

    • このアプローチの欠点は、セキュリティを処理する方法が、セキュリティにまったく関係のないロジックにも関与することです。
  2. registerResource()リソース URI と同じ URI を使用して、呼び出しごとにフィルターを登録します。フィルターは、応答ヘッダーを設定するための応答になります。

    • このアプローチの欠点は、同じ目的を果たすフィルターが多すぎる可能性があることです。しかし、これまでのところ、これが最も簡単な解決策のようです。
  3. ルート パスに 1 つのフィルターを登録し、要求 URI が既知のリソース URI パスに対応する場合に応答ヘッダーを設定するように構成します。

    • このアプローチの欠点は、リソース パスを知るためにフィルタを教育する必要があることです。これは、実装が少し複雑になることを意味します。

提案された解決策について意見を聞き、他の代替案を知りたいと思っています。

4

1 に答える 1

2

Equinox Jetty ベースの HttpService 実装は、すぐに使用できるすべてのリソース登録のヘッダーを既にサポートしIf-None-Match、要求しています。If-Modified-Since

ただし、フレームワークに依存せず、 HttpService 標準に準拠する必要があり、リソースをプログラムで登録する場合は、リソース要求を処理する独自のサーブレット (例: Equinox のものなど) を作成することをお勧めします。registerResourcesこのサーブレットを使用して任意のリソース登録を直接ラップする代わりに、 registerServlet. そこに任意のキャッシュ戦略を実装できます。

于 2012-08-06T13:30:37.880 に答える