URL の外部化 externalizing-urls
AEM の Externalizer は、あらかじめ設定された DNS をプレフィックスとして、リソースパス(例えば /path/to/my/page
)をプログラム的に外部の絶対 URL(例えば https://www.mycompany.com/path/to/my/page
)に変換できる OSGi サービスです。
AEM as a Cloud Service インスタンスには自分の外部向け URL がわからず、また、場合によってはリンクをリクエストスコープの範囲外で作成する必要があるので、このサービスは、そのような外部 URL を設定して作成するための一元的な場所を提供します。
この記事では、Externalizer サービスの設定方法と使用方法について説明します。サービスの技術的詳細について詳しくは、Javadocsを参照してください。
Externalizer のデフォルトの動作とオーバーライド方法 default-behavior
Externalizer サービスはすぐに使用でき、いくつかのドメイン識別子を、環境用に生成された AEM サービスの URL に一致する絶対 URL プレフィックス(author https://author-p12345-e6789.adobeaemcloud.com
や publish https://publish-p12345-e6789.adobeaemcloud.com
など)にマップします。これらの各デフォルトドメインのベース URL は、Cloud Manager で定義された環境変数から読み取られます。
参考までに、com.day.cq.commons.impl.ExternalizerImpl.cfg.json
のデフォルトの OSGi 設定は実質的に次のとおりです:
{
"externalizer.domains": [
"local $[env:AEM_EXTERNALIZER_LOCAL;default=http://localhost:4502]",
"author $[env:AEM_EXTERNALIZER_AUTHOR;default=http://localhost:4502]",
"publish $[env:AEM_EXTERNALIZER_PUBLISH;default=http://localhost:4503]",
"preview $[env:AEM_EXTERNALIZER_PREVIEW;default=http://localhost:4503]"
]
}
local
、author
、preview
および publish
OSGi 設定の Externalizer ドメインマッピングは、上記にリストされた元の $[env:...]
値で保持する必要があります。com.day.cq.commons.impl.ExternalizerImpl.cfg.json
ファイルを AEM as a Cloud Service にデプロイして、これらの標準提供のドメインマッピングを省略した場合、アプリケーションの予期しない動作が発生する可能性があります。preview
および publish
の値をオーバーライドするには、記事 AEM as a Cloud Service 用の OSGi の設定の説明に従って Cloud Manager 環境変数を使用し、事前定義された AEM_CDN_DOMAIN_PUBLISH
および AEM_CDN_DOMAIN_PREVIEW
変数を設定します。
Externalizer サービスの設定 configuring-the-externalizer-service
Externalizer サービスでは、プログラムでリソースパスにプレフィックスを付けるために使用可能なドメインを一元的に定義できます。Externalizer サービスは、1 つのドメインを持つアプリケーションにのみ使用してください。
Externalizer サービスのドメインマッピングを定義するには:
-
次の方法で設定マネージャーに移動します。
https://<host>:<port>/system/console/configMgr
-
「Day CQ Link Externalizer」をクリックして設定ダイアログボックスを開きます。
note note NOTE この設定に直接アクセスするためのリンクは https://<host>:<port>/system/console/configMgr/com.day.cq.commons.impl.ExternalizerImpl
です。 -
ドメイン マッピングを定義します。マッピングは、次のように、コード内でドメインを参照するために使用できる一意の名前、スペース、ドメインから構成されます。
<unique-name> [scheme://]server[:port][/contextpath]
ここで、
-
scheme
は通常、http または https ですが、別のプロトコルを指定することもできます。- アドビでは、https を使用して https リンクを強制適用することをお勧めします。
- URL の外部化を要求する際にクライアントコードがスキームを上書きしない場合に使用されます。
-
server
はホスト名(ドメイン名または IP アドレス)です。 -
port
(オプション)はポート番号です。 -
contextpath
(オプション)は、AEM が異なるコンテキストパスの下の Web アプリケーションとしてインストールされている場合に限り設定します。
例:
production https://my.production.instance
次のマッピング名は事前定義されており、AEM で使用されるので、常に設定されている必要があります。
local
- ローカルインスタンスauthor
- オーサリングシステムの DNSpublish
- 公開 Web サイトの DNS
note note NOTE カスタム設定を使用すると、 production
やstaging
などの新しいカテゴリまたはmy-internal-webservice
などの AEM 以外の外部システムを追加できます。このような URL をプロジェクトのコードベースの様々な場所にハードコーディングするのを防ぐのに役立ちます。 -
-
「保存」をクリックして変更を保存します。
Externalizer サービスの使用 using-the-externalizer-service
ここでは、Externalizer サービスの使用方法に関するいくつかの例を紹介します。
-
「publish」ドメインを付与してパスを外部化するには:
code language-java String myExternalizedUrl = externalizer.publishLink(resolver, "/my/page") + ".html";
ドメインマッピングが次のような場合:
-
publish https://www.website.com
-
myExternalizedUrl
が次の値で終わる。 -
https://www.website.com/contextpath/my/page.html
-
-
「author」ドメインを付与してパスを外部化するには:
code language-java String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
ドメインマッピングが次のような場合:
-
author https://author.website.com
-
myExternalizedUrl
が次の値で終わる。 -
https://author.website.com/contextpath/my/page.html
-
-
「local」ドメインを付与してパスを外部化するには:
code language-java String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
ドメインマッピングが次のような場合:
-
local https://publish-3.internal
-
myExternalizedUrl
が次の値で終わる。 -
https://publish-3.internal/contextpath/my/page.html
-