外部化URL

在AEM中,Externalizer​是一种OSGI服务,它允许您以编程方式转换资源路径(例如,/path/to/my/page)通过预配置的DNS来预定路径,从而将其置于外部和绝对URL(例如https://www.mycompany.com/path/to/my/page)中。

由于实例在Web层后面运行时无法知道其外部可见URL,并且由于有时必须在请求范围之外创建链接,因此此服务提供了一个中心位置来配置这些外部URL并构建它们。

本页介绍如何配置​Externalizer​服务及其使用方法。 有关更多详细信息,请参阅Javaocs

配置外部器服务

Externalizer​服务允许您集中定义多个域,这些域可用于以编程方式为资源路径添加前缀。 每个域都由一个唯一名称来标识,该名称用于以编程方式引用该域。

要为​Externalizer​服务定义域映射,请执行以下操作:

  1. 通过​Tools​导航到配置管理器,然后导航到​Web控制台,或输入:

    https://<host>:<port>/system/console/configMgr

  2. 单击​Day CQ Link Externalizer​以打开配置对话框。

    注意

    到配置的直接链接为https://<host>:<port>/system/console/configMgr/com.day.cq.commons.impl.ExternalizerImpl

    aem-externalizer-01

  3. 定义​Domains​映射:映射由唯一名称组成,该名称可在代码中用于引用域、空格和域:

    <unique-name> [scheme://]server[:port][/contextpath]

    其中:

    • ​架构通常为http或https,但也可以是ftp等。

      • 如有需要,可使用https强制使用https链接
      • 如果客户端代码在请求将URL外部化时不覆盖方案,则将使用该URL。
    • ​server是主机名(可以是域名或ip地址)。

    • port (可选)是端口号。

    • contextpath (可选)仅在将AEM安装为位于其他上下文路径下的web应用程序时才设置。

    例如:production https://my.production.instance

    以下映射名称是预定义的,且必须始终设置,因为AEM依赖于这些映射名称:

    • local — 本地实例
    • author — 创作系统DNS
    • publish — 面向公众的网站DNS
    注意

    自定义配置允许您添加新类别,如productionstaging,甚至外部非AEM系统,如my-internal-webservice。 避免在项目代码库中的不同位置对此类URL进行硬编码非常有用。

  4. 单击​Save​以保存更改。

注意

Adobe建议您将配置添加到存储库

使用外部器服务

此部分显示如何使用​Externalizer​服务的一些示例:

  1. 要在JSP中获取Externalizer服务,请执行以下操作:

    Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);
    
  2. 要将路径外部化为“publish”域,请执行以下操作:

    String myExternalizedUrl = externalizer.publishLink(resolver, "/my/page") + ".html";
    

    假设域映射:

    • publish https://www.website.com

    myExternalizedUrl 最后是值:

    • https://www.website.com/contextpath/my/page.html
  3. 要将路径外部化为“author”域,请执行以下操作:

    String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
    

    假设域映射:

    • author https://author.website.com

    myExternalizedUrl 最后是值:

    • https://author.website.com/contextpath/my/page.html
  4. 要将路径外部化为“本地”域,请执行以下操作:

    String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
    

    假设域映射:

    • local https://publish-3.internal

    myExternalizedUrl 最后是值:

    • https://publish-3.internal/contextpath/my/page.html
  5. 您可以在Javaocs中找到更多示例。

在此页面上