本文档将介绍以下内容:
AEM门户体系结构包括门户和portlet的定义。
门户是一个Web应用程序,它提供个性化、单一登录、来自不同来源的内容集成,并托管信息系统的表示层。
您可以在AEM中运行符合JSR 286规范的portlet。 portlet组件允许您在页面上嵌入portlet。 请参阅管理AEM Content Portlet。
Portlet是部署在容器内的Web组件,用于生成动态内容。 portlet接口被打包并部署为portlet容器内的。war文件。 如果您以门户的身份运行AEM,则需要portlet的。war文件来运行portlet。
要将AEM内容配置为显示在门户中,请参阅在portlet中安装、配置和使用AEM。
AEM PortalDirector从AEM 6.4起已弃用。请参阅已弃用和已删除功能。
AEM内容portlet允许您在门户中显示AEM内容。 portlet在/crx-quickstart/opt/portal
上可用,并可以通过各种方式进行自定义。 例如,您可以通过部署您自己的身份验证服务来为AEM生成所需的身份验证信息以覆盖默认行为,来自定义SSO/身份验证处理。 插件使用定义的API,它允许您根据API构建插件来添加您自己的功能。 插件可部署到正在运行的portlet中。 要正常工作,它需要AEM作者配置和发布实例以及要在启动时显示的内容路径。
某些配置可以通过portlet首选项进行更改,而其他配置则可以通过OSGi服务配置进行更改。 您可以使用config文件或OSGi Web控制台更改这些配置。
可以在部署时在门户服务器中配置门户首选项,或在部署portlet Web应用程序之前编辑WEB-INF/portlet.xml文件。 默认情况下,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库管理器配置中启用强制 CQUrlInfo(例如,通过Felix Webconsole),否则编辑将无法工作,并且不会显示首选项对话框。 |
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进行的——还用于在“Day PortalDirectorportlet Bridge”的OSGi配置中全局配置一些url参数。 |
preferenceDialog | AEM中首选项对话框的路径——如果留空,将使用内置首选项对话框。 默认为/libs/portal/content/prefs.html。 |
initialRedirect | 默认情况下,portlet在第一次调用时执行整个门户页面的javascript重定向。 这支持现代门户服务器的拖放方案。 在生产中,很少需要此重定向,因此可以关闭此首选项,将此首选项设置为false。 |
假定门户服务器运行于主机localhost上,端口8080,并且AEM portlet Web应用程序已装入Web应用程序上下文cqportlet中,则Web控制台的URL为https://localhost:8080/cqportlet/cqbridge/system/console
。 默认用户和密码为admin。
打开Configurations选项卡,选择Portal Directory CQ Server Configuration。 在此处,您指定作者和发布实例的基本URL。 此过程在配置Portlet中有介绍。
OSGi Web控制台仅用于在开发(或测试)过程中更改配置。 确保阻止对生产系统控制台的请求。
为了支持自动部署和配置配置设置,AEM content portlet内置了配置支持功能,它尝试从提供到portlet应用程序的类路径中读取配置。
启动时,读取系统属性com.day.cq.portet.config以检测当前环境。 通常,此属性的值类似于dev、prod、test等。 如果未设置环境,则不会读取配置。
如果设置了环境,则在类路径中搜索配置文件:* 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以使用其自己的缓存,请执行以下操作:
https://localhost:8080/cqportlet/cqbridge/cqpcache?Path=$(path)
。 使用GET作为方法。与正常的调度程序失效一样,复制代理也可以配置为目标门户的AEM portlet缓存。 配置复制代理后,每个常规页面激活都会刷新门户缓存。
如果运行AEM portlet的多个门户节点,您需要为每个节点创建一个代理,如本过程所述。
为门户配置复制代理:
登录到创作实例。
在“网站”选项卡中,单击“工具”选项卡。
单击新建页面……复制代理中的新……菜单。
在模板中,选择复制代理,然后输入代理的名称。 单击创建。
多次-单击您刚刚创建的复制代理。 它显示为无效,因为尚未配置它。
单击编辑。
在设置选项卡中,选中已启用复选框,选择调度程序刷新作为序列化类型,然后输入重试超时(例如,60000)。
单击传输选项卡。
在URI字段中,输入portlet的刷新URI(URL)。 URI的形式如下:
https://<wps-host>:<port>/<wps-context>/<cq5-portlet-context>/cqbridge/cqpcache
单击Extended选项卡。
在HTTP方法字段中,键入GET。
在HTTP头字段中,单击+以添加新条目并键入路径:{path}。
如有必要,单击Proxy选项卡,然后为代理输入代理信息。
单击确定以保存更改。
要测试连接,请单击测试连接链接。 将显示一条日志消息,指示复制测试是否成功。 例如:
您可以通过访问为复制代理配置的同一URL手动刷新portlet缓存。 有关URL的形式,请参阅刷新缓存。 此外,URL需要用URL参数Path=<path>进行扩展,以指示要刷新的内容。
例如:
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在AEM WCM实例中使用的身份验证配置选项在Web控制台(OSGi配置)中可用。
使用AEM时,有几种方法可以管理OSGi服务(控制台或存储库节点)的配置设置。
有关完整的详细信息,请参阅配置OSGi。
要访问portlet的身份验证配置:
通过以下URL访问Web控制台:
https://localhost:8080/cqportlet/cqbridge/system/console
例如,在其默认配置中:
https://wps-host:10040/wps/PA_CQ5_Portlet/cqbridge/system/console
登录到Web控制台。 默认凭据为admin/admin
。
在控制台中,选择配置。
在配置菜单中,选择要配置的特定服务。 服务由OSGi框架中的portlet提供。
服务名称 | 描述 |
---|---|
日门户Director身份验证器 | 配置用于AEM WCM实例的身份验证模式。 根据所选模式,可以指定技术用户或SSO Cookie的名称。 此外,还可以启用AEM WCM发布实例的身份验证。 |
日门户Director文件缓存 | 配置portlet缓存其从AEM WCM实例接收的响应方式的参数。 |
日门户DirectorHTTP客户端服务 | 配置portlet如何通过HTTP连接到基础AEM WCM实例。 例如,可以指定代理服务器。 |
日门户Director区域设置处理程序 | 配置portlet支持的语言环境。 对AEM WCM实例的请求基于用户区域设置;例如,用户语言德语将请求/content/geometrixx/de/ … |
日门户Director特权经理 | 根据当前登录的用户配置portlet是否应测试“网站”选项卡。 |
日门户Director工具栏渲染器 | 自定义portlet工具栏的呈现。 |
此外,您还可以配置Web控制台和日志记录服务。 例如,您可以通过单击Apache Felix OSGi管理控制台链接来更改Web控制台的管理员凭据。
在默认模式下,portlet为AEM WCM作者实例发出的所有请求都将使用同一技术用户进行身份验证,而不管当前门户用户如何。 技术用户模式默认处于启用状态。 在OSGi管理控制台中的相应配置屏幕中启用/禁用此模式:
如果启用了在发布上进行身份验证,则指定的技术用户必须存在于AEM WCM作者实例和发布实例中。 请务必为用户授予足够的访问权限,以便进行创作。
Portlet支持SSO(即装即用的AEM)。 身份验证器服务可以配置为使用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>
portlet可以使用单点登录(SSO)方案验证AEM WCM的身份。 在此模式下,当前登录到门户的用户以SSO cookie的形式转发到AEM WCM。 如果使用SSO模式,则对AEM portlet具有访问权限的所有门户用户都必须知道底层AEM WCM实例,最常采用AEM WCM连接到LDAP的形式,或事先手动创建用户的方式。 此外,在portlet中启用SSO之前,需要将基础AEM WCM作者实例(如果启用了在Publish上进行身份验证,则还需要将发布实例)配置为接受基于SSO的请求。
要配置portlet以使用SSO身份验证模式,请完成以下步骤(在以下各节中有详细说明):
在为AEM WCM启用SSO之前,需要将基础存储库配置为接受AEM WCM提供的受信任凭据。 为此,请配置AEM repository.xml。
在安装AEM WCM的文件系统中,打开以下文件:
//crx-quickstart/repository/repository.xml
在XML文件中,找到LoginModule的条目,并将trust_credentials属性添加到其配置中:
<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
...
<param name="trust_credentials_attribute" value="TrustedInfo"/>
<param name="anonymous_principal" value="anonymous"/>
</LoginModule>
重新启动AEM WCM以使更改生效。
要在AEM WCM中启用SSO,请访问AEM WCM的Apache Felix Web管理控制台(OSGi)中的相关配置条目:
通过位于https://<AEM-host>:<port>/system/console的URI访问控制台。
在“配置”菜单中,选择“SSO身份验证处理程序”。 在此示例中,SSO处理函数根据AEM portlet提供的cookie接受所有路径的SSO请求。 您的配置可能会有所不同。
路径 | / | 为所有请求启用SSO处理程序 |
---|---|---|
Cookie名称 | cqpsso | portlet在portlet的OSGi控制台中配置的cookie的名称。 |
单击保存以启用SSO。 SSO现在是主身份验证方案。
对于AEM WCM收到的每个请求,首先尝试基于SSO的身份验证。 失败时,执行回退到通常的基本身份验证方案。 因此,与AEM WCM的正常连接(无SSO)仍可能存在。
为了使基础AEM WCM实例接受SSO请求,必须将portlet的身份验证模式从Technical切换为SSO。
要在AEM portlet中启用SSO身份验证:
通过位于https://<aem-host>:<port>/system/console的URI访问控制台。
在“配置”菜单中,从可用配置的列表中选择Day PortalDirector身份验证器。
在模式中,选择SSO。 保留其他参数的默认值。
单击“保存”以为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 -> [ ]
如果您没有使用AEM content portlet的默认内联编辑功能,但希望portlet的创作和管理部分直接在AEM作者实例中位于门户外部,则应启用PIN身份验证。 您还需要更改管理按钮的配置。
要打开网站管理页面或从portlet编辑页面,AEM内容portlet使用新的pin身份验证。 默认情况下,禁用PIN身份验证,因此,必须在AEM中进行以下配置更改:
通过在repository.xml文件中添加受信任信息,在AEM中启用受信任身份验证:
<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
...
<param name="trust_credentials_attribute" value="TrustedInfo"/>
</LoginModule>
在OSGi配置控制台(默认位置为https://localhost:4502/system/console/configMgr)中,从下拉菜单中选择CQ PIN身份验证处理程序。
编辑URL根路径参数,只包含单个值/。
portlet的某些功能受权限保护。 当前用户需要具有此权限才能访问此函数。 预定义了以下权限:
管理权限的最佳方法是使用门户角色并为这些权限分配角色。 这可以通过OSGi配置完成。 “日门户Director权限管理器”可配置为每个权限的一组角色。 如果用户具有其中一个角色,则用户具有相应的权限。
此外,还可以根据每个portlet实例库的访问来定义此角色。 portlet的首选项对话框包含上述每个权限的输入字段。 对于每个权限,可以配置以逗号分隔的portlet角色列表。 如果配置了值,则这将覆盖“Day PortalDirector权限管理器”服务中的全局配置,并且可能需要从此全局设置添加相同的角色,因为角色未合并! 如果未指定值,则使用全局配置。
提供的AEM portlet应用程序像AEM一样在Web应用程序中开始OSGi容器。 此架构允许您利用OSGi的所有优势:
工具栏及其按钮是可配置的,并且可以进行自定义。 您可以向工具栏添加您自己的按钮,或定义在哪种模式下显示哪些按钮。 每个按钮都是可通过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/图像位于/com/day/cq/portlet/toolbar/layout文件夹内的事实由portlet规定,不能更改。 同样,MANIFEST.MF中的导入包和导出包头也必须被称为/com/day/cq/portlet/toolbar/layout。 Bundle-SymbolicName必须是唯一且完全限定的包名称。
您可以使用手动或手动创建此类jar文件的工具(如本节所示)来构建它。
portlet的工具栏基本上有两种视图状态。 每个视图和关联按钮都可以用相应的HTML文件进行自定义。
发布视图只有一个按钮,可将工具栏切换到管理视图。 发布视图由上一个bundle中的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文档中的包管理器以获取详细说明。
所有链接都将重写,以在门户上下文中工作。 默认情况下,使用带有渲染参数的链接。 可以将门户DirectorHTML重写器配置为改用操作链接。
您还可以定义要查询的其他请求参数以查看要显示的内容路径。 这很有用,例如,如果有从外部到特定内容的链接。
此外,门户DirectorHTML重写程序可配置一列表定义为不包括链接重写的常规表达式。 例如,如果您有到外部系统的相对链接,则应将这些链接添加到此排除列表。
AEM内容portlet具有内置的本地化功能,可确保AEM中的内容使用正确的语言。
此操作分两步完成:
/content/geometrixx/en/company.html
,并且根据配置,它使用用户的实际区域设置重写en。门户Director区域设置处理程序可以配置用于检查区域设置信息的路径——通常,这包括/content
下的所有内容以及路径中区域设置信息的位置。 默认情况下,区域设置处理函数遵循在AEM中重新公认组织多语言站点。
如果您的站点没有处理路径中区域设置信息的严格规则,则可以将区域设置处理程序替换为您自己的实现。
可实现可选的OSGi服务以自定义portlet的各个部分。 每个服务对应一个Java接口。 此接口可以通过portlet中的捆绑实现和部署。
RequestTracker | 每当portlet显示内容时,请求跟踪器都会收到通知。 这允许您跟踪portlet的调用。 |
InvocationContextListener | 在对portlet的每个请求的开始和结束时调用的监听器。 监听器可用于更改或添加当前请求的信息。 |
ErrorHandler | 渲染阶段错误的自定义错误处理程序。 |
HttpProcessor | 此服务可用于向AEM的每个http调用添加信息。 |
PortletAction | 向portlet添加自己的操作——可以通过portlet操作链接调用此操作。 |
PortletDecoratorService | 此服务可用于装饰portlet的内容。 |
资源提供程序 | 添加您自己的资源提供者,以便通过指向客户端的portlet资源链接来传送某些资源。 |
TextMapper | 允许您发布处理HTML、CSS和Javascript文件。 |
工具栏按钮 | 将您自己的按钮添加到工具栏。 |
UrlMapper | 添加服务以应用自定义url映射或重写。 |
用户信息提供者 | 添加您自己的用户信息。 此服务可用于从门户获取信息到portlet。 |
以下服务在内容portlet中具有默认实现(带有相应的Java接口)。 要进行自定义,需要将包含新服务实现的捆绑包部署到portlet应用程序中。
实施此类服务时,请确保将服务的service.ranking属性设置为正值。 默认实现使用排名 0,portlet使用排名最高的服务。
名称 | 描述 | 默认行为 |
---|---|---|
身份验证器 | 向AEM提供身份验证信息 | 使用可配置的技术用户进行创作和发布。 或者可以使用SSO。 |
HTMLRewriter | 重写链接、图像等。 | 重写AEM链接到门户链接,可以通过UrlMapper和TextMapper扩展 |
HttpClientService | 处理所有http连接 | 标准实施 |
LocaleHandler | 处理区域设置信息 | 重写指向与区域设置相关的内容的链接。 |
LocaleDetector | 检测用户的区域设置。 | 使用门户提供的区域设置。 |
PrivilegeManager | 检查用户权限 | 如果允许用户编辑内容,则检查对作者实例的访问权限 |
工具栏渲染器 | 呈现工具栏 | 添加工具栏功能 |
portlet API(JSR-286)指定portlet事件。 AEM内容portlet具有集成桥,将AEM portlet的portlet事件作为OSGi事件分发——这使portlet事件的处理变得可插拔。
如果要处理特定事件,请在部署描述符中将这些事件声明为接收(或通过门户服务器配置它),并实现声明EventHandler接口的OSGi服务(请参阅OSGi EventAdmin规范)。
每当出现portlet事件时,都会调用处理程序发送特定OSGi事件。 处理程序获取所有上下文信息,并可以相应地更新portlet的状态或发送新事件。 基本上,在句柄方法中,可以使用portlet事件阶段的所有功能。
使用Portlet组件将portlet窗口添加到AEM页面。 安装到应用程序服务器的共享库使Portlet组件能够检测已部署的Portlet应用程序。
要将AEM用作门户,请执行以下任务:
仅当AEM部署为Web应用程序时,才可使用portlet组件。 (请参阅安装AEM和应用程序服务器。)
AEM Quickstart JAR文件包含portlet组件文件。 要获取文件(cq-portlet-components.zip),您可以执行快速启动或提取内容。
执行或解压Quickstart JAR文件的内容,并相应地找到cq-portlet-components.zip文件:
打开部署到应用程序服务器的CQ5作者实例的包管理器。 (https://appserverhost:port/cq5author/crx/packmgr)
使用包管理器来上传并安装 cq-portlet-components.zip包。
该包将cq-portlet-director-sharedlibs-x.x.x.jar安装在存储库的/libs/portal/director文件夹中。
将cq-portlet-director-sharedlibs-x.x.x.jar复制到硬盘。 使用任何方式获取文件,例如FileVault或WebDAV客户端。
将cq-portlet-director-sharedlibs.x.x.x.jar文件移到应用程序服务器的共享库文件夹,以便类可用于部署的portlet应用程序。
将portlet组件添加到段落系统,以便作者可以使用它。
在Sidekick中,单击标尺图标以进入设计模式。
在第一个段落上方的Design of par
标题旁,单击编辑。
在常规组件类别中,选中Portlet组件旁边的复选框,然后单击确定。
将Portlet部署到应用程序服务器Web容器,以便它们可用于Portal组件。 在部署portlet应用程序之前,您需要配置应用程序,以便它加载AEM portal容器servlet。 此配置使Portlet组件能够访问Portlet。
提取portlet应用程序WAR文件的内容。
提示: jar xf nameofapp **.war命令提取文件。
在文本编辑器中打开web.xml文件。
在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>
保存web.xml文件并重新打包WAR文件。
提示: 该 jar cvf nameofapp.war *
命令将当前目录的内容添加到app.war文件的名称中。
将portlet应用程序部署到应用程序服务器。 有关信息,请参阅应用程序服务器的相关文档。
使用门户组件向网页添加portlet窗口。 使用组件属性指定要显示的portlet。
在网页上,将Portlet组件从Sidekick中的“常规”组拖动到该页面。
将组件拖到页面后,请重新加载页面以确保其正常工作。
多次-单击组件以打开Portlet属性。
在Portlet实体下拉菜单中,从列表中选择portlet。
根据您是否要查看portlet的标题栏,选择或清除“隐藏标题栏”复选框。
在Portlet窗口字段中,根据需要输入唯一的Portlet窗口ID。
如果您计划在同一页面上多次使用同一portlet,请为每个portlet提供一个不同的窗口ID。
单击确定。portlet显示在AEM页面上。
要访问AEM WCM提供的内容,门户服务器需要与AEM门户DirectorPortlet一起安装。 要执行此操作,请使用本节中提供的步骤,安装、配置Portlet并将其添加到门户页面。
默认情况下,portlet连接到localhost:4503处的发布实例和localhost:4502处的作者实例。 这些值可以在部署portlet时进行更改。 门户控制器在/libs/portal/directory下作为存储库中的内容可用。 您需要先下载应用程序war文件,然后再使用它。
使用Webdav或CRXDE Lite,导航到/libs/portal/director。
下载cq-portlet-webapp.war。
这些过程以Websphere门户为例,尽管它们尽可能通用;请注意,其他Web门户的程序会有所不同。 尽管所有Web门户的步骤基本相同,但您需要为特定Web门户重新设定这些步骤的用途。
安装Portlet:
以管理员权限登录到门户。
导航到Web门户的Portlet Management部分。
单击“安装”并浏览至您下载的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)。
通过选中该选项或复选框,确保portlet应用程序自动开始,并保存您所做的更改。 您会看到一条消息,表明您的安装成功。
安装portlet后,您需要对其进行配置,以便它知道基础AEM实例(作者和发布)的URL。 您还可以配置其他选项。
要配置Portlet,请执行以下操作:
在应用程序服务器的门户管理窗口中,导航到portlet管理,其中列出了所有portlet,然后选择AEM PortalDirectorportlet。
根据需要配置portlet。 例如,您可能需要更改创作和发布实例的URL以及开始路径的URL。 Portlet首选项中介绍了默认配置。
如果portlet配置为连接到AEM作者并发布在不同于**/的上下文路径上运行的实例,您需要在这些AEM实例的Html库管理器配置中启用强制CQUrlInfo**(例如,通过Felix Webconsole)或编辑将无法工作,并且不显示首选项对话框。
在应用程序服务器中保存配置更改。
导航到portlet的OSGI管理控制台。 默认位置为https://<wps-host>:<port>/wps/PA_CQ5_Portlet/cqbridge/system/console/configMgr
。 默认用户名/密码为admin/admin。
选择Day PortalDirectorCQ服务器配置配置并编辑以下值:
单击保存。您现在可以将portlet添加到门户页面并使用门户。
当从AEM请求内容时,portlet将使用当前显示模式(发布或作者)和当前路径来组合完整的URL。 对于默认值,第一个url为https://localhost:4503/content/geometrixx/en.portlet.html
。 htmlSelector
的值会自动添加到扩展前的URL中。
如果portlet切换到帮助模式并选择appendHelpViewModeAsSelector
,则还会附加help
选择器,例如https://localhost:4503/content/geometrixx/en.portlet.html.help
。 如果portlet窗口最大化,并且选择appendMaxWindowStateAsSelector
,则选择器也会附加,例如https://localhost:4503/content/geometrixx/en.portlet.max.help
。
选择器可以在AEM中进行评估,不同的选择器可以使用不同的模板。
通常,开始路径直接指向AEM中的内容。 但是,如果要在AEM而不是portlet首选项中保持开始路径,可以将开始路径指向AEM中的内容映射,如/var/portlets
。 在这种情况下,在AEM中运行的脚本可以使用portlet中提交的信息来确定哪个url是开始URL。 它应发出指向正确URL的重定向。
要将portlet添加到门户页面,请执行以下操作:
要访问您添加到portlet的页面: