AEM门户和Portlet

本文档将介绍以下内容:

  • AEM Portal架构
  • 管理和配置AEM作为门户
  • 将AEM用作门户
  • 在portlet(例如Web服务器)中安装、配置和显示AEM内容

AEM Portal Architecture

AEM门户架构包括门户和portlet的定义。

什么是门户?

门户是一个Web应用程序,它提供个性化、单点登录、来自不同来源的内容集成,并托管信息系统的表示层。

您可以在AEM中运行符合JSR 286的portlet。 Portlet组件允许您在页面上嵌入Portlet。 请参阅管理AEM内容Portlet

什么是portlet?

Portlet是部署在容器内的Web组件,用于生成动态内容。 Portlet接口被打包并部署为Portlet容器内的.war文件。 如果您将AEM作为门户运行,则需要Portlet的.war文件来运行Portlet。

要将AEM内容配置为显示在门户中,请参阅在portlet中安装、配置和使用AEM 。

AEM Portal Director

注意

从AEM 6.4起,已弃用AEM Portal Director。请参阅已弃用和已删除的功能

管理AEM内容Portlet

通过AEM内容portlet,您可以在门户中显示AEM内容。 Portlet在/crx-quickstart/opt/portal上可用,并可以通过各种方式进行自定义。 例如,您可以通过部署您自己的身份验证服务来生成AEM覆盖默认行为所需的身份验证信息,从而自定义SSO/身份验证处理。 插件使用定义的API,通过该API,您可以根据API构建插件,以添加自己的功能。 该插件可以部署到正在运行的portlet中。 要正常运行,需要配置AEM创作和发布实例以及内容路径,才能在启动时显示。

某些配置可以通过portlet首选项进行更改,而其他配置则通过OSGi服务配置进行更改。 使用​config​文件或OSGi Web控制台更改这些配置。

Portlet首选项

可以在部署Portlet Web应用程序之前,在Portlet服务器中或通过编辑​WEB-INF/portlet.xml​文件来配置Portlet首选项。 默认情况下,portlet.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="https://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
             xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd /opt/SUNWps/dtd/portlet.xsd"
             version="1.0">
   <portlet>
      <portlet-name>RSSWeatherPortlet</portlet-name>
      <portlet-class>org.jboss.portlet.weather.WeatherPortlet</portlet-class>
      <init-param>
         <name>default_zipcode</name>
         <value>05673</value>
      </init-param>
      <init-param>
         <name>RSS_XSL</name>
         <value>/WEB-INF/Rss.xsl</value>
      </init-param>
      <init-param>
         <name>base_url</name>
         <value>https://xml.weather.yahoo.com/forecastrss?p=</value>
      </init-param>
      <expiration-cache>180</expiration-cache>
      <supports>
         <mime-type>text/html</mime-type>
         <portlet-mode>VIEW</portlet-mode>
         <portlet-mode>EDIT</portlet-mode>
      </supports>
      <portlet-info>
         <title>Weather Portlet</title>
      </portlet-info>
      <portlet-preferences>
         <preference>
            <name>expires</name>
            <value>180</value>
         </preference>
         <preference>
            <name>RssXml</name>
            <value>https://xml.weather.yahoo.com/forecastrss?p=33145</value>
            <read-only>false</read-only>
         </preference>
      </portlet-preferences>
   </portlet>
</portlet-app>

Portlet可以使用以下首选项进行配置:

startPath

这是portlet的开始路径:它定义最初显示的内容。

重要信息:如果portlet配置为连接到AEM创作实例和发布在与 /不同的上下文路径上运行的实例,则您需要在这些AEM实例的Html库管理器配置(例如,通过Felix Webconsole)或编辑中启用强制 CQUrlInfo,并且不会显示首选项对话框。

htmlSelector 附加到每个URL的选择器。 默认情况下,这是portlet,因此对html页面的所有请求都使用以.portlet.html结尾的url。 这允许在AEM中使用自定义脚本来渲染portlet。
addCssToPortalHeader

默认情况下,AEM的HTML页面中包含的css文件将包含在Portlet中。 禁用此选项将排除默认的css文件。

如果启用了此选项,则CSS文件会添加到html页面的标题中,或嵌入到html页面中,具体取决于门户的行为。

includeToolbar 默认情况下,工具栏会呈现在内容portlet内以用于管理功能。 禁用此选项后,不会呈现任何工具栏。
urlParameterNames

替代URL参数名称的列表,该名称可能包含要为Portlet显示的新内容URL。 该列表按从上到下的顺序处理,将使用包含值的第一个参数。 如果未找到URL,则使用默认的URL参数。 提供的URL将按原样使用,无需进行任何进一步修改。

此设置是按已部署的Portlet进行的 — 它还可以在OSGi配置中为“Day Portal Director Portlet Bridge”全局配置一些URL参数。

preferenceDialog AEM中首选项对话框的路径 — 如果留空,将使用内置首选项对话框。 默认为/libs/portal/content/prefs.html。
initialRedirect 默认情况下,Portlet在第一次调用时对整个门户页面执行Javascript重定向。 这是为了支持现代门户服务器的拖放方案。 在生产中,很少需要此重定向,因此可以关闭此重定向,并将此首选项设置为false

OSGi Web控制台

假设门户服务器在主机localhost上运行,端口8080,并且AEM portlet Web应用程序在Web应用程序上下文​cqportlet​中挂载,则Web控制台的URL为http://localhost:8080/cqportlet/cqbridge/system/console。 默认的用户和密码为​admin

打开​Configurations​选项卡,然后选择​Portal Directory CQ Server Configuration。 在此,您可以指定作者和发布实例的基本URL。 配置Portlet中介绍了此过程。

注意

OSGi Web控制台仅用于在开发(或测试)期间更改配置。 确保阻止向生产系统的控制台发出请求。

提供配置

为了支持自动部署和配置配置配置,AEM内容portlet具有内置配置支持,该配置支持尝试从提供给portlet应用程序的类路径中读取配置。

启动时,会读取系统属性​com.day.cq.portet.config​以检测当前环境。 通常,此属性的值类似于​devprodtest​等。 如果未设置环境,则不会读取任何配置。

如果设置了环境,则会在类路径* com/day/cq/portlet/{env}.config​中搜索配置文件,其中​env​被替换为环境的实际值。 此文件应列出此环境的所有配置文件。 这些文件会相对于配置文件的位置进行搜索。 例如,如果文件包含行my.service.xml, ,则会从位于com/day/cq/portlet/my.service.config.的类路径中读取此文件。文件名由服务的持久性ID组成,后跟​.config*。 在上一个示例中,持久性ID为​my.service。 配置文件的格式是Apache Sling OSGi安装程序使用的格式。

这意味着,对于每个环境,都需要添加相应的配置文件。 需要在所有这些文件中输入应用于所有环境的配置 — 如果只适用于单个环境,则只需在该文件中输入。 此机制可确保完全控制在哪个环境中读取哪个配置。

可以使用不同的系统属性来检测环境。 指定系统属性​com.day.cq.portet.configproperty,其中包含要使用的系统属性的名称,而不是​com.day.cq.portet.config

缓存和缓存失效

Portlet在其默认配置中,将从AEM WCM收到的响应缓存到用户特定的缓存中。 当发布实例的内容发生更改时,缓存需要失效。 为此,在AEM WCM中,必须在创作实例上配置复制代理。 也可以手动刷新缓存。 本节将介绍这两个过程。

Portlet可以使用其自己的缓存进行配置,以便Portlet中的内容显示而无需访问AEM。 该门户在/libs/portal/director中以内容形式提供。 要访问内容,请启动AEM实例,然后使用CRXDE Lite或Webdav从该位置下载文件。

您可以在运行时部署此包,也可以在部署前将其添加到Portlet Web应用程序的WEB-INF/lib/resources/bundles中。

部署缓存后,Portlet会缓存发布实例中的内容。 使用AEM的调度程序刷新,Portlet缓存可以失效。 要配置Portlet以使用其自己的缓存,请执行以下操作:

  1. 在作者中配置以门户服务器为目标的复制代理。

  2. 假定门户服务器在主机​localhostport 8080 ​ 上运行,并且AEM portlet Web应用程序在上下文​cqportlet​中挂载,则用于刷新缓存的url为http://localhost:8080/cqportlet/cqbridge/cqpcache?Path=$(path)。 使用GET作为方法。

    注意: 您可以发送名为Path 的http标头,而不是使用请求​参数。

通过复制代理刷新缓存

与正常的调度程序失效一样,复制代理也可以配置为定向门户的AEM portlet缓存。 配置复制代理后,每次常规页面激活都会刷新门户缓存。

如果运行AEM Portlet的多个门户节点,则需要为每个节点创建一个代理,如此过程中所述。

要为门户配置复制代理,请执行以下操作:

  1. 登录到创作实例。

  2. 在网站选项卡中,单击​工具​选项卡。

  3. 单击​新建页面……复制代理​中的​新……​菜单。

    screen_shot_2012-02-15at40647pm

  4. 在​模板​中,选择​复制代理,然后输入代理的名称。 单击​创建

    screen_shot_2012-02-15at40817pm

  5. 双击您刚刚创建的复制代理。 由于尚未配置,因此显示为无效。

    screen_shot_2012-02-15at41001pm

  6. 单击​编辑。

  7. 在​设置​选项卡中,选中​已启用​复选框,选择​调度程序刷新​作为序列化类型,然后输入重试超时(例如60000)。

    screen_shot_2012-02-15at42101pm

  8. 单击​Transport​选项卡。

  9. 在​URI ​ 字段中,输入Portlet的刷新URI(URL)。 URI的格式如下:

    https://<wps-host>:<port>/<wps-context>/<cq5-portlet-context>/cqbridge/cqpcache
    

    screen_shot_2012-02-15at42322pm

  10. 单击​Extended​选项卡。

    screen_shot_2012-02-15at42515pm

  11. 在​HTTP方法​字段中,键入​GET

  12. 在​HTTP标头​字段中,单击​+​以添加新条目并键入​路径:{path}

  13. 如有必要,单击​Proxy​选项卡,并向代理输入代理信息。

  14. 单击​确定​以保存更改。

  15. 要测试连接,请单击​Test Connection​链接。 出现日志消息,指示复制测试是否成功。 例如:

    screen_shot_2012-02-15at42639pm

手动刷新Portlet缓存

您可以通过访问为复制代理配置的相同URL来手动刷新Portlet缓存。 有关URL的形式,请参阅刷新缓存 。 此外,需要使用URL参数Path=<path>扩展URL,以指示要刷新的内容。

例如:

https://10.0.20.99:10040/wps/PA_CQ5_Portlet/cqbridge/cqpcache?Path=* 刷新完整缓存。https://10.0.20.99:10040/wps/PA_CQ5_Portlet/cqbridge/cqpcache?Path=/content/mypage/xyz 从缓 /content/mypage/xyz 存中刷新。

门户安全

入口是驱动认证机制。 您可以与技术用户、门户用户、组等登录AEM。 Portlet无权访问门户中用户的密码,因此,如果Portlet不知道要成功登录用户的所有凭据,则必须使用SSO解决方案。 在这种情况下, AEM Portlet会将所有必需的信息转发给AEM,而又会将此信息转发给基础AEM存储库。 此行为可插拔,并可进行自定义。

发布时的身份验证

本节介绍Portlet在与基础AEM WCM实例通信时可使用的身份验证模式。

默认情况下,不会向AEM的发布实例发送用户信息;内容始终显示为匿名用户。 如果应从AEM传递用户特定信息,或者如果需要对发布进行用户身份验证,则必须启用此设置。

访问Portlet的身份验证配置

Portlet在AEM WCM实例中使用的身份验证配置选项在Web控制台中可用(OSGi配置)。

注意

使用AEM时,可以通过多种方法来管理OSGi服务(控制台或存储库节点)的配置设置。

有关完整的详细信息,请参阅配置OSGi

要访问Portlet的身份验证配置,请执行以下操作:

  1. 通过以下URL访问Web控制台:

    http://localhost:8080/cqportlet/cqbridge/system/console

    例如,在其默认配置中:

    https://wps-host:10040/wps/PA_CQ5_Portlet/cqbridge/system/console

  2. 登录到Web控制台。 默认凭据为admin/admin

  3. 在控制台中,选择​Configuration

  4. 在​配置​菜单中,选择要配置的特定服务。 服务由OSGi框架中的Portlet提供。

    服务名称 描述
    Day Portal Director Authenticator 配置用于AEM WCM实例的身份验证模式。 根据所选的模式,可以指定技术用户或SSO Cookie的名称。 此外,还可以启用AEM WCM发布实例的身份验证。
    Day Portal Director文件缓存 配置Portlet如何缓存其从AEM WCM实例收到的响应的参数。
    Day Portal Director HTTP客户端服务 配置portlet如何通过HTTP连接到基础AEM WCM实例。 例如,您可以指定代理服务器。
    Day Portal Director区域设置处理程序 配置Portlet支持的区域设置。 对AEM WCM实例的请求基于用户区域设置;例如,用户语言德语将请求/content/geometrixx/de/
    日门户Director权限管理器 根据当前登录的用户配置Portlet是否应测试“网站”选项卡。
    Day Portal Director工具栏渲染器 自定义Portlet工具栏的呈现。
  5. 此外,您还可以配置Web控制台和日志记录服务。 例如,您可以通过单击Apache Felix OSGi管理控制台链接来更改Web控制台的管理员凭据。

技术用户模式

在默认模式下,Portlet为AEM WCM创作实例发出的所有请求都将使用同一技术用户进行身份验证,而不考虑当前的门户用户。 默认情况下,“技术用户”模式处于启用状态。 在OSGi管理控制台的相应配置屏幕中启用/禁用此模式:

如果启用了​在Publish​上进行身份验证,则指定的技术用户必须存在于AEM WCM创作实例和发布实例中。 确保为用户授予足够的访问权限,以便进行创作工作。

单点登录

Portlet支持开箱即用的AEM SSO。 验证器服务可以配置为使用SSO,并将格式为​Basic​的当前门户用户作为名为cqpsso的Cookie传输到AEM。 AEM应配置为对路径/使用SSO身份验证处理程序。 此处还需要配置Cookie名称。

需要相应地配置AEM存储库的crx-quickstart/repository/repository.xml:

<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
  ...
  <param name="trust_credentials_attribute" value="TrustedInfo"/>
  <param name="anonymous_principal" value="anonymous"/>
</LoginModule>

SSO身份验证模式

Portlet可以使用单点登录(SSO)方案来验证AEM WCM。 在此模式下,当前登录到门户的用户将以SSO Cookie的形式转发到AEM WCM。 如果使用SSO模式,则对AEM Portlet具有访问权限的所有门户用户都必须知晓基础AEM WCM实例,通常以AEM WCM连接到LDAP的形式,或通过事先手动创建用户的方式。 此外,在portlet中启用SSO之前,基础AEM WCM创作实例(以及发布实例,如果​在发布时进行身份验证)需要配置为接受基于SSO的请求。

要配置Portlet以使用SSO身份验证模式,请完成以下步骤(在以下各节中有详细描述):

  • 启用AEM WCM的存储库以接受可信凭据。
  • 在AEM WCM中启用SSO身份验证。
  • 在AEM Portlet中启用SSO身份验证。

使AEM WCM的存储库接受可信凭据

在为AEM WCM启用SSO之前,需要将基础存储库配置为接受AEM WCM提供的可信凭据。 要实现此目的,请配置AEM repository.xml。

  1. 在安装了AEM WCM的文件系统中,打开以下文件:

    //crx-quickstart/repository/repository.xml

  2. 在XML文件中,找到​LoginModule​的条目,并将trust_credentials_attribute添加到其配置中:

    <LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
      ...
      <param name="trust_credentials_attribute" value="TrustedInfo"/>
      <param name="anonymous_principal" value="anonymous"/>
    </LoginModule>
    
  3. 重新启动AEM WCM以使更改生效。

在AEM WCM中启用SSO身份验证

要在AEM WCM中启用SSO,请访问AEM WCM的Apache Felix Web管理控制台(OSGi)中的相关配置条目:

  1. 通过位于https://<AEM-host>:<port>/system/console的URI访问控制台。

  2. 在“配置”菜单中,选择SSO身份验证处理程序。 在此示例中,SSO处理程序根据AEM Portlet提供的Cookie接受所有路径的SSO请求。 您的配置可能会有所不同。

    路径 / 为所有请求启用SSO处理程序
    Cookie名称 cqpsso Portlet在Portlet的OSGi控制台中配置的Cookie的名称。
  3. 单击​Save​以启用SSO。 SSO现在是主要的身份验证方案。

对于AEM WCM收到的每个请求,首先尝试基于SSO的身份验证。 失败时,将执行回退到通常的基本身份验证方案。 因此,与AEM WCM(不使用单点登录)的正常连接仍然可能。

在AEM Portlet中启用SSO身份验证

为了使基础AEM WCM实例接受SSO请求,必须将portlet的身份验证模式从​Technical​切换到​SSO

要在AEM Portlet中启用SSO身份验证,请执行以下操作:

  1. 通过位于https://<aem-host>:<port>/system/console的URI访问控制台。

  2. 在“配置”菜单中,从可用配置列表中选择Day Portal Director Authenticator 。

  3. 在模式中,选择SSO。 将其他参数保留为其默认值。

    chlimage_1-11

  4. 单击“保存”为Portlet启用SSO。

    出于测试目的,在AEM WCM中以管理员权限创建同一用户后,可以使用门户的管理用户访问portlet。

执行此过程后,请求将使用SSO进行身份验证。 HTTP通信中的典型代码片段显示存在以下特定于SSO和Portlet的标头:

C-12-#001898 -> [GET /mynet/en/_jcr_content/par/textimage/image.img.png HTTP/1.1 ]
C-12-#001963 -> [cq5:locale: en ]
C-12-#001979 -> [cq5:used-locale: en ]
C-12-#002000 -> [cq5:locales: en,en_US ]
C-12-#002023 -> [cqp:user: wpadmin ]
C-12-#002042 -> [cqp:portal: IBM WebSphere Portal/6.1 ]
C-12-#002080 -> [cqp:windowid: 7_CGAH47L000CE302V2KFNOG0084 ]
C-12-#002124 -> [cqp:windowstate: normal ]
C-12-#002149 -> [cqp:portletmode: view ]
C-12-#002172 -> [User-Agent: Jakarta Commons-HttpClient/3.1 ]
C-12-#002216 -> [Host: 10.0.0.68:4502 ]
C-12-#002238 -> [Cookie: $Version=0; cqpsso=Basic+d3BhZG1pbg%3D%3D ]
C-12-#002289 -> [ ]

启用PIN身份验证

如果您没有使用AEM内容portlet的默认内联编辑功能,但希望门户外部的创作和管理部分直接在AEM创作实例中使用,则应该启用PIN身份验证。 您还需要更改管理按钮的配置。

要打开网站管理页面或从portlet编辑页面,AEM内容portlet使用新的pin身份验证。 默认情况下,PIN身份验证处于禁用状态,因此必须在AEM中进行以下配置更改:

  1. 通过在repository.xml文件中添加可信信息,在AEM中启用可信身份验证:

    <LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
      ...
      <param name="trust_credentials_attribute" value="TrustedInfo"/>
    </LoginModule>
    
  2. 在OSGi配置控制台中,默认位于http://localhost:4502/system/console/configMgr ,从下拉菜单中选择​CQ PIN身份验证处理程序

  3. 编辑​URL根路径​参数,以仅包含单个值​/

权限

Portlet的某些功能受权限保护。 当前用户需要具有此权限才能访问此函数。 预定义了以下权限:

  • "toolbar" :这是查看/使用Portlet中的工具栏的一般权限。
  • "prefs" :如果用户具有此权限,则允许用户查看/更改Portlet的首选项。
  • "cq-author:edit" :使用此权限,允许用户调用内容的编辑视图。
  • "cq-author:preview" :使用此权限,用户可以查看预览。
  • "cq-author:siteadmin" :通过此权限,允许用户在AEM中打开siteadmin。

管理权限的最佳方法是使用门户角色并为这些权限分配角色。 这可以通过OSGi配置来完成。 可以为“Day Portal Director权限管理器”配置每个权限的一组角色。 如果用户具有其中一个角色,则用户具有相应的权限。

此外,还可以根据每个portlet实例库的访问来定义此角色。 Portlet的“首选项”对话框包含用于上述每种权限的输入字段。 对于每个权限,可以配置以逗号分隔的portlet角色列表。 如果配置了值,则它将覆盖“Day Portal Director Privilege Manager”服务中的全局配置,并且在角色未合并时可能需要从此全局设置中添加相同的角色! 如果未指定任何值,则使用全局配置。

自定义AEM Portlet应用程序

提供的AEM portlet应用程序会像AEM一样在Web应用程序内启动OSGi容器。 此架构让您能够利用OSGi的所有优势:

  • 易于更新和扩展
  • 在门户服务器不进行任何交互的情况下提供Portlet的热更新
  • 易于自定义portlet

工具栏按钮

工具栏及其按钮是可配置的,并可进行自定义。 您可以在工具栏中添加自己的按钮,或定义在哪种模式下显示的按钮。 每个按钮都是可通过OSGi配置配置的OSGi服务。

OSGi Web控制台在​Configuration​选项卡上列出了所有按钮配置。 对于每个按钮,您可以定义此按钮在哪种模式下显示。 例如,您可以通过删除所有模式来禁用按钮。

默认情况下, AEM内容portlet使用内联编辑功能。 但是,如果您希望切换到AEM创作实例进行编辑,请启用​SiteAdmin Button​和​ContentFinder Button,但禁用​Edit Button。 在这种情况下,请确保在AEM中正确配置PIN身份验证。

可以通过Portlet的Felix Web控制台安装包来自定义Portlet的工具栏布局,该包包含预定义位置的自定义CSS/HTML。

束结构

以下是包结构示例:

$ jar tvf target/toolbarlayout-0.0.1-SNAPSHOT.jar | awk '{print $8}'
META-INF/
META-INF/MANIFEST.MF
/com/day/cq/portlet/toolbar/layout/
/com/day/cq/portlet/toolbar/layout/author.gif
/com/day/cq/portlet/toolbar/layout/back.gif
/com/day/cq/portlet/toolbar/layout/button.html
/com/day/cq/portlet/toolbar/layout/edit.gif
/com/day/cq/portlet/toolbar/layout/manage.html
/com/day/cq/portlet/toolbar/layout/publish.html
/com/day/cq/portlet/toolbar/layout/refresh.gif
/com/day/cq/portlet/toolbar/layout/siteadmin.gif
/com/day/cq/portlet/toolbar/layout/toolbar.css

META-INF文件夹包含OSGi将其标识为包所需的MANIFEST.MF文件。 显示如下:

Manifest-Version: 1.0
Built-By: djaeggi
Created-By: Apache Maven Bundle Plugin
Import-Package: com.day.cq.portlet.toolbar.layout
Bnd-LastModified: 1234178347159
Export-Package: com.day.cq.portlet.toolbar.layout
Bundle-Version: 0.0.1.SNAPSHOT
Bundle-Name: Company CQ5 Portal Director Portlet Toolbar Layout
Bundle-Description: This bundle provides a custom layout for the CQ5 P
 ortal Director Portlet Toolbar.
Build-Jdk: 1.5.0_16
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.day.cq.portlet.company.toolbarlayout
Tool: Bnd-0.0.255

HTML/CSS/images位于/com/day/cq/portlet/toolbar/layout文件夹内这一事实是Portlet强制要求的,不能更改。 同样,MANIFEST.MF中的Import-Package和Export-Package标头也必须称为/com/day/cq/portlet/toolbar/layout。 Bundle-SymbolicName必须是唯一且完全限定的包名称。

您可以使用Maven之类的工具来构建该文件,也可以手动创建此类jar文件,并设置相关标头,如此部分所示。

Portlet工具栏视图

Portlet的工具栏基本上有两种视图状态。 每个视图和关联的按钮都可以使用相应的HTML文件进行自定义。

发布视图

发布视图只有一个按钮,可将工具栏切换到管理视图。 发布视图由上一个包中的publish.html文件表示。 在HTML中,您可以使用以下占位符,在呈现时,这些占位符将由Portlet替换为相应的内容:

发布视图占位符

占位符字符串 描述
占位符由​管理​按钮替换,该按钮会将portlet状态切换为管理状态。

管理视图

“管理”视图包含四个按钮:“编辑”、“网站”选项卡、“刷新”和“返回”。 管理视图由上一个包中的manage.html文件表示。 在HTML中,您可以使用以下占位符,在呈现时,这些占位符将由Portlet替换为相应的内容:

管理视图占位符

占位符字符串 描述
占位符由​编辑​按钮替换,该按钮会在AEM编辑模式下打开一个具有当前页面的新窗口。
占位符,替换为打开AEM WCM的“网站”选项卡的按钮。
刷新当前视图。
将portlet切换回发布视图。

按钮

按钮在显示的任何视图上,都使用在button.html中定义的相同通用HTML。

在HTML中,您可以使用以下占位符,在呈现时,这些占位符将由Portlet替换为相应的内容:

管理和发布视图按钮

占位符字符串 描述
按钮的名称,例如​作者、后退、刷新​等。
按钮的CSS ID。
按钮目标的URL。
按钮的标签。
Javascript onclick​函数(包含{url})。

button.html文件的示例:

<div class="cqp_button">

 <a href="#" onclick="{onclick}">

 <img src="/wps/PA_CQ5_Portlet/cqbridge/static/{id}.gif" alt="{text}"
title="{text}"/>

 </a>
</div>

安装自定义布局

要安装自定义布局,请访问portlet的OSGI Web控制台​Bundles​部分并上载包。

如果您需要上传或创建安装软件包,请参阅AEM文档中的包管理器以了解详细说明。

所有链接都将被重写,以便在Portal上下文中工作。 默认情况下,会使用带有呈现参数的链接。 可以将门户Director HTML重写器配置为改用操作链接。

您还可以定义要查询的其他请求参数以查看要显示的内容路径。 例如,如果存在从外部到特定内容的链接,则此功能非常有用。

此外,还可以为门户Director HTML重写器配置一个为链接重写定义的排除的正则表达式列表。 例如,如果您具有与外部系统的相对链接,则应将其添加到此排除列表。

本地化

AEM内容portlet具有内置的本地化功能,可确保AEM中的内容使用正确的语言。

可分两步完成此操作:

  1. 门户目录区域设置检测器通过从门户获取区域设置来检测门户用户的区域设置。 必须在AEM中为此服务配置可用语言的列表。
  2. 门户Director区域设置处理程序处理当前请求的本地化。 它采用所请求内容的路径,例如/content/geometrixx/en/company.html,并根据配置,使用用户的实际区域设置重写​en

门户Director区域设置处理程序可以配置用于检查区域设置信息的路径 — 通常包括/content下的所有内容以及路径中区域设置信息的位置。 默认情况下,区域设置处理程序遵循在AEM中构建多语言站点的重新通用化。

如果您的站点没有用于处理路径中区域设置信息的严格规则,则可以使用您自己的实施替换区域设置处理程序。

可选OSGi服务

可以实施可选的OSGi服务来自定义Portlet的各个部分。 每个服务都对应一个Java接口。 此接口可以通过包实施和部署到Portlet中。

RequestTracker 每当Portlet显示内容时,请求跟踪器都会收到通知。 这样,您就可以跟踪portlet的调用。
InvocationContextListener 在对portlet的每个请求的开始和结束时调用的侦听器。 监听器可用于更改或添加当前请求的信息。
ErrorHandler 呈现阶段错误的自定义错误处理程序。
HttpProcessor 此服务可用于向AEM的每次http调用添加信息。
PortletAction 向portlet添加自己的操作 — 此操作可通过portlet操作链接调用。
PortletDecoratorService 此服务可用于装饰portlet的内容。
ResourceProvider 添加您自己的资源提供程序,以通过Portlet资源链接将某些资源交付到客户端。
TextMapper 允许您后处理HTML、CSS和Javascript文件。
工具栏按钮 在工具栏中添加您自己的按钮。
UrlMapper 添加服务以应用自定义url映射或重写。
UserInfoProvider 添加您自己的用户信息。 此服务可用于从门户获取信息到portlet。

替换默认服务

以下服务在内容portlet中具有默认实施(具有相应的Java界面)。 要进行自定义,需要将包含新服务实施的包部署到Portlet应用程序中。

在实施此类服务时,请确保将服务的​service.ranking​属性设置为正值。 默认实施使用排名 ​ 0,Portlet使用排名最高的服务。

名称 描述 默认行为
身份验证器 向AEM提供身份验证信息 使用可配置的技术用户进行创作和发布。 或者,也可以使用单点登录。
HTMLRewriter 重写链接、图像等 将AEM链接重写到门户链接,可通过UrlMapper和TextMapper扩展
HttpClientService 处理所有http连接 标准实施
LocaleHandler 处理区域设置信息 根据区域设置,重写指向内容的链接。
LocaleDetector 检测用户的区域设置。 使用门户提供的区域设置。
权限管理器 检查用户权限 检查在允许用户编辑内容时对创作实例的访问权限
ToolbarRenderer 呈现工具栏 添加工具栏功能

Portlet事件

portlet API(JSR-286)指定portlet事件。 AEM内容portlet具有集成的桥,它将AEM portlet事件作为OSGi事件分发为portlet事件 — 这使处理portlet事件变得可插拔。

如果要处理特定事件,请在部署描述符中声明这些事件作为接收事件(或通过门户服务器配置它),并实施声明EventHandler接口的OSGi服务(请参阅OSGi EventAdmin规范)。

每当发生portlet事件时,都会调用您的处理程序发送特定的OSGi事件。 处理程序获取所有上下文信息,并可相应地更新Portlet的状态或发送新事件。 基本上,在句柄方法内部可以使用portlet事件阶段的所有功能。

将AEM用作门户

使用Portlet组件将Portlet窗口添加到AEM页面。 安装到应用程序服务器的共享库使Portlet组件能够检测已部署的Portlet应用程序。

要将AEM用作门户,请执行以下任务:

  1. 安装Portlet组件和共享库。
  2. 将Portlet组件添加到Sidekick。
  3. 配置和部署Web应用程序,该应用程序包含要在门户组件中显示的Portlet。
  4. 将Portlet组件添加到页面并选择要显示的Portlet。
注意

只有将AEM部署为Web应用程序时,才能使用portlet组件。 (请参阅使用应用程序服务器安装AEM。)

安装Portlet组件

AEM快速入门JAR文件包含Portlet组件文件。 要获取文件(cq-portlet-components.zip),您可以执行快速入门,或解压缩内容。

  1. 执行或提取快速入门JAR文件的内容,并相应地找到cq-portlet-components.zip文件:

    • 执行快速启动:crx-quickstart/opt/portal
    • 提取快速入门内容:静态/选择/门户
  2. 打开部署到应用程序服务器的CQ5创作实例的包管理器。 (https://appserverhost:port/cq5author/crx/packmgr)

  3. 使用包管理器上载并安装 cq-portlets-components.zip包。

    该包将cq-portlet-director-sharedlibs-x.x.x.jar安装在存储库的/libs/portal/director文件夹中。

  4. 将cq-portlet-director-sharedlibs-x.x.x.jar复制到硬盘。 使用任何方式获取文件,例如FileVault或WebDAV客户端。

  5. 将cq-portlet-director-sharedlibs.x.x.x.jar文件移动到应用程序服务器的共享库文件夹中,以便类可用于部署的portlet应用程序。

将Portlet组件添加到Sidekick

将portlet组件添加到段落系统,以便作者可以使用它。

  1. 在Sidekick中,单击标尺图标以进入设计模式。

  2. 在第一段上方的Design of par标题旁边,单击​编辑

  3. 在​General​组件类别中,选中Portlet组件旁边的复选框,然后单击“确定”。

chlimage_1-20

配置和部署Portlet应用程序

将portlet部署到应用程序服务器Web容器,以便它们可用于门户组件。 在部署Portlet应用程序之前,您需要配置该应用程序,以便它加载AEM Portal容器Servlet。 此配置使Portlet组件能够访问Portlet。

  1. 提取Portlet应用程序WAR文件的内容。

    提示: jar xf nameofapp .war命​令会提取文件。

  2. 在文本编辑器中打开web.xml文件。

  3. 在Web应用程序元素中添加以下Servlet配置:

    <servlet>
            <servlet-name>slingportal</servlet-name>
            <servlet-class>org.apache.sling.portal.container.api.ContainerServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
            <servlet-name>slingportal</servlet-name>
            <url-pattern>/SlingPortletInvoker</url-pattern>
    </servlet-mapping>
    
  4. 保存web.xml文件并重新打包WAR文件。

    提示:jar cvf nameofapp.war * 令将当前目录的内容添加到nameofapp.war文件中。

  5. 将Portlet应用程序部署到应用程序服务器。 有关信息,请参阅应用程序服务器相关文档。

将portlet添加到您的AEM页

使用Portal组件将Portlet窗口添加到网页。 使用组件属性指定要显示的portlet。

  1. 在网页上,将​Portlet​组件从Sidekick中的“常规”组拖到该页。

    注意

    将组件拖到页面后,重新加载页面以确保其正常工作。

  2. 双击组件以打开Portlet属性。

  3. 在​Portlet实体​下拉菜单中,从列表中选择Portlet。

  4. 根据您是否要查看Portlet的标题栏,选择或清除​隐藏标题栏​复选框。

  5. 在​Portlet窗口​字段中,根据需要输入唯一的Portlet窗口ID。

    注意

    如果您计划在同一页面上多次使用同一Portlet,请为每个Portlet指定不同的窗口ID。

  6. 单击​确定。Portlet显示在您的AEM页面上。

    chlimage_1-12

在Portlet中安装、配置和使用AEM

要访问AEM WCM提供的内容,需要为门户服务器安装AEM Portal Director Portlet。 为此,请使用本节中提供的步骤来安装、配置Portlet并将其添加到门户页面。

默认情况下,Portlet会连接到localhost:4503处的发布实例,并连接到localhost:4502处的创作实例。 这些值可以在部署Portlet期间进行更改。 门户控制器在/libs/portal/directory下的存储库中以内容形式提供。 您需要先下载应用程序战争文件,然后再使用它。

下载战争文件

  1. 使用Webdav或CRXDE Lite,导航到/libs/portal/director。

  2. 下载​cq-portlet-webapp.war

注意

这些过程尽可能地通用,但以Websphere门户为例;请注意,其他Web门户的程序各不相同。 尽管所有Web门户的步骤基本相同,但您需要为特定Web门户重新调整这些步骤的用途。

安装Portlet

要安装Portlet,请执行以下操作:

  1. 使用管理员权限登录到门户。

  2. 导航到Web门户的Portlet管理部分。

  3. 单击“安装”并浏览到您下载的AEM portlet应用程序(cq-portlet-webapp.war),然后输入有关portlet的其他重要信息。

    对于其他基本Portlet信息,您可以接受默认值或更改值。 如果接受默认值,则Portlet可在https://<wps-host>:<port>/wps/PA_CQ5_Portlet中找到。 Portlet提供的OSGi管理控制台位于https://<wps-host>:<port>/wps/ PA_CQ5_Portlet/cqbridge/system/console(默认用户名/密码为admin/admin)。

  4. 通过选中该选项或复选框并保存您的更改,确保Portlet应用程序自动启动。 您会看到一条消息,指示安装成功。

配置Portlet

安装Portlet后,您需要对其进行配置,以便它知道基础AEM实例(创作和发布)的URL。 您还可以配置其他选项。

要配置Portlet,请执行以下操作:

  1. 在应用程序服务器的门户管理窗口中,导航到Portlet管理,其中列出了所有Portlet,然后选择AEM Portal Director Portlet。

  2. 根据需要配置portlet。 例如,您可能需要更改创作和发布实例的URL以及开始路径的URL。 Portlet首选项中介绍了默认配置。

    注意

    如果portlet配置为连接到AEM创作实例和发布实例,这些实例在与 ​ /​不同的上下文路径上运行,则您需要在这些AEM实例的Html库管理器配置中启用强制​CQUrlInfo(例如,通过Felix Webconsole)或编辑将不起作用,并且将不显示首选项对话框。

  3. 在应用程序服务器中保存配置更改。

  4. 导航到Portlet的OSGI管理控制台。 默认位置为https://<wps-host>:<port>/wps/PA_CQ5_Portlet/cqbridge/system/console/configMgr。 默认用户名/密码为​admin/admin

  5. 选择​Day Portal Director CQ服务器配置​配置并编辑以下值:

    • 作者基本URL:AEM创作实例的基本URL。
    • 发布基本URL:AEM发布实例的基本URL。
    • 作者用作发布:创作实例是否用作发布实例(用于开发)?

    chlimage_1-13

  6. 单击​保存。现在,您可以将portlet添加到门户页面并使用门户。

内容URL

当从AEM请求内容时,Portlet使用当前显示模式(发布或创作)和当前路径来组合完整的URL。 如果使用默认值,则第一个url为http://localhost:4503/content/geometrixx/en.portlet.htmlhtmlSelector的值会自动添加到扩展之前的URL中。

如果Portlet切换到帮助模式并选择了appendHelpViewModeAsSelector ,则还会附加help选择器,例如http://localhost:4503/content/geometrixx/en.portlet.html.help。 如果最大化了Portlet窗口并选择了appendMaxWindowStateAsSelector ,则还会附加选择器,例如http://localhost:4503/content/geometrixx/en.portlet.max.help

选择器可以在AEM中评估,而不同的模板可用于不同的选择器。

在AEM中使用内容Url映射

通常,开始路径直接指向AEM中的内容。 但是,如果要在AEM中而不是portlet首选项中维护起始路径,则可以将起始路径指向AEM中的内容映射,如/var/portlets。 在这种情况下,在AEM中运行的脚本可以使用portlet中提交的信息来确定哪个url是起始URL。 它应会发出到正确URL的重定向。

将Portlet添加到门户页面

要将Portlet添加到门户页面,请执行以下操作:

  1. 确保您位于应用程序服务器的管理窗口中,并导航到管理页面的位置。 (例如,在WebSphere 6.1中,单击​管理页面)。

  2. 选择Portlet的名称,然后选择现有页面或创建新页面。

  3. 编辑页面布局。

  4. 选择Portlet并将其添加到容器。

  5. 保存更改。

使用Portlet

要访问您添加到Portlet的页面,请执行以下操作:

  1. 在Portlet的个性化菜单中,将Portlet配置为在Portal中配置。
  2. 打开配置(Portlet显示在Portlet配置中配置的发布开始URL),并根据需要进行编辑,然后保存它们。

在此页面上