コンポーネントおよびその他の要素のカスタマイズ

独自のコンポーネントを作成したり、既存のコンポーネントをカスタマイズしたりするとき、多くの場合は、既存の定義を再利用する方法が最も簡単(かつ安全)です。同じ原則が、エラーハンドラーなど、AEM 内の他の要素にも当てはまります。

これは、既存の定義をコピーしてオーバーレイすることで実行することができます。つまり、/libs から /apps/<your-project> に定義をコピーします。この新しい定義は /apps で、必要に応じて更新できます。

NOTE
詳しくは、オーバーレイの使用を参照してください。

例:

  • コンポーネントをカスタマイズ

    これには、コンポーネント定義のオーバーレイが含まれます。

    • 既存のコンポーネントをコピーすることにより、/apps/<website-name>/components/<MyComponent> にコンポーネントフォルダーを作成します。

      • 例えば、テキストコンポーネントをカスタマイズするには、次のようにコピーします。

        • コピー元:/libs/foundation/components/text
        • コピー先:/apps/myProject/components/text
  • エラーハンドラーによって表示されるページをカスタマイズ

    この場合、サーブレットのオーバーレイを含みます。

    • リポジトリで、1 つ以上のデフォルトスクリプトをコピーします。

      • コピー元:/libs/sling/servlet/errorhandler/
      • コピー先:/apps/sling/servlet/errorhandler/
CAUTION
/libs パス内は一切変更し​ ない ​でください。
次回インスタンスをアップグレードするときに /libs の内容が上書きされるためです(また、ホットフィックスまたは機能パックを適用するときに上書きされる可能性もあります)。
設定およびその他の変更の手順は以下のとおりです。
  1. /libs 内の項目を /apps にコピー
  2. /apps 内での変更

JCR クエリを使用する場合と使用しない場合

JCR クエリは、正しく使用すれば強力なツールとなります。以下の場合に適しています。

  • コンテンツに対するフルテキスト検索などの実際のエンドユーザークエリ。

  • 構造化されたコンテンツをリポジトリ全体で見つける必要がある場合。

    このような場合は、クエリが必要な場合にのみ実行するようにしてください。例えば、コンポーネントのアクティベーションやキャッシュの無効化などです(ワークフローステップ、コンテンツ変更時にトリガーされるイベントハンドラー、フィルターなどとは対照的です)。

純粋なレンダリングリクエストには JCR クエリを使用しないでください。例えば、JCR クエリは以下の場合には適しません。

  • ナビゲーションのレンダリング
  • 「最新ニュース上位 10 項目」の概要の作成
  • コンテンツ項目の数の表示

コンテンツをレンダリングするためには、JCR クエリを実行する代わりに、コンテンツツリーへのナビゲーションアクセスを使用します。

NOTE
Query Builder を使用する場合は、JCR クエリを使用します。Query Builder では、内部で JCR クエリが生成されるからです。

セキュリティに関する考慮事項

NOTE
セキュリティチェックリストを参照することもお勧めします。

JCR(リポジトリ)セッション

管理セッションではなく、ユーザーセッションを使用します。つまり、次のものを使用する必要があります。

slingRequest.getResourceResolver().adaptTo(Session.class);

クロスサイトスクリプティング(XSS)に対する保護

クロスサイトスクリプティング(XSS)を使用すると、攻撃者が他のユーザーが閲覧した web ページにコードを挿入できます。このセキュリティ脆弱性は、悪意のある web ユーザーによって悪用され、アクセス制御をバイパスする可能性があります。

AEM では、ユーザーが提供するコンテンツをすべて出力時にフィルタリングする原則を適用しています。XSS を回避することは、開発とテストの両方において最優先されます。

また、Apache 対応の mod_security などの web アプリケーションファイアウォールを使用すると、デプロイメント環境のセキュリティを高い信頼性で一元的に制御でき、以前は検出されなかったクロスサイトスクリプティング攻撃に対する保護も可能です。

CAUTION
AEM に用意されているサンプルコードは、それ自体ではこのような攻撃に対する保護は行わない場合があり、通常は web アプリケーションファイアウォールによるリクエストフィルタリングに依存します。

XSS API チートシートには、XSS API を使用して AEM アプリケーションのセキュリティを強化するために知っておくべき情報が含まれています。こちらからダウンロードできます。

XSSAPI チートシート。

ファイルを入手

機密情報の通信の保護

どのインターネットアプリケーションでも同じですが、機密情報を転送する際は、以下の点を確認してください。

  • トラフィックが SSL によって保護されていること
  • 適宜 HTTP POST が使用されていること

これは、システムに対して機密の情報(設定や管理アクセスなど)とユーザーに対して機密の情報(個人情報の詳細など)の両方に該当します。

個別の開発タスク

エラーページのカスタマイズ

エラーページは AEM 用にカスタマイズできます。内部サーバーエラー時にインスタンスが Sling トレースを表示しないようにするために、カスタマイズをお勧めします。

詳しくは、エラーハンドラーによって表示されるページのカスタマイズを参照してください。

Java™ プロセスでファイルを開く

AEM は多数のファイルにアクセスできるので、Java™ プロセス用に開いているファイルの数を AEM 用に明示的に設定することをお勧めします。

この問題を最小限に留めるために、開発の際は、開かれたすべてのファイルが(合理的に)可能な限り正しく閉じられることを確認する必要があります。

前のページAEM タッチ操作対応 UI の概念
次のページクライアントサイドライブラリの使用

Experience Manager