用户同步 user-synchronization
简介 introduction
当部署为 发布场,则成员需要能够登录并查看其任何发布节点上的数据。
创作环境中不需要在发布环境中创建的用户和用户组(用户数据)。
在创作环境中创建的大多数用户数据都打算保留在创作环境中,而不会复制到发布实例。
对一个发布实例进行的注册和修改需要与其他发布实例同步,以便它们能够访问相同的用户数据。
自AEM 6.1起,启用用户同步后,将在场中的发布实例中自动同步用户数据,而不会在创作时创建。
Sling分发 sling-distribution
用户数据及其 ACL,存储在 Oak Core,使用Oak JCR下的层,并使用 Oak API. 如果不经常更新,则合理使用将用户数据与其他发布实例同步 Sling内容分发 (Sling分发)。
与传统复制相比,使用Sling Distribution进行用户同步的好处有:
-
用户, 用户配置文件 和 用户组 在发布时创建,而不是在创作时创建
-
Sling分发会在jcr事件中设置属性,从而能够在发布端事件侦听器中执行操作,而无需考虑无限复制循环
-
Sling分发仅将用户数据发送到非原始发布实例,从而消除不必要的流量
-
ACL 在用户节点中设置的内容包含在同步中
启用用户同步 enable-user-sync
disabled
.用户同步依赖于创作环境来管理用户数据分发,即使用户数据不是在创作时创建的。 许多配置(但并非全部)都在创作环境中进行,每个步骤都可明确地确定是在创作环境还是发布环境中执行配置。
以下是启用用户同步所需的步骤,然后是 疑难解答 部分:
前提条件 prerequisites
-
如果用户和用户组已在一个发布者上创建,则建议 手动同步 在配置和启用用户同步之前,将用户数据发送给所有发布者。
启用用户同步后,仅同步新创建的用户和组。
-
确保已安装最新代码:
1. Apache Sling Distribution Agent — 同步代理工厂 apache-sling-distribution-agent-sync-agents-factory
启用用户同步
-
在作者
-
使用管理员权限登录
-
访问 Web控制台
-
定位
Apache Sling Distribution Agent - Sync Agents Factory
-
选择要打开以进行编辑的现有配置(铅笔图标)
验证
name
:socialpubsync
-
选择
Enabled
复选框 -
选择
Save
-
-
2.创建授权用户 createauthuser
配置权限
此授权用户将在步骤3中用于在创作时配置Sling分发。
-
在每个发布实例上
-
使用管理员权限登录
-
访问 安全控制台
-
创建新用户
- 例如,
usersync-admin
- 例如,
-
将此用户添加到
administrators
用户组 -
Allow jcr:all
限制rep:glob=*/activities/*
-
- 分配的默认用户为
admin
. - 请勿使用
*communities-user-admin *user*.*
如何添加ACL addacls
-
访问CRXDE Lite
-
选择
/home
节点 -
在右侧窗格中,选择
Access Control
选项卡 -
选择
+
按钮添加ACL条目- 主体: 搜索为用户同步创建的用户
- 类型:
Allow
- 权限:
jcr:all
- 限制 rep
*/activities/*
- 选择 确定
-
选择 全部保存
另请参阅
- 访问权限管理
- 疑难解答部分 在响应处理期间修改操作异常.
3.AdobeGranite分发 — 加密密码传输密钥提供程序 adobegraniteencpasswrd
配置权限
授权用户后,administrators
用户组(已在所有发布实例上创建),授权用户必须在创作时被标识为具有从创作同步到发布的用户数据的权限。
4. Apache Sling Distribution Agent — 队列代理工厂 apache-sling-distribution-agent-queue-agents-factory
启用用户同步
-
发布 :
-
使用管理员权限登录
-
访问 Web控制台
-
定位
Apache Sling Distribution Agent - Queue Agents Factory
-
选择要打开以进行编辑的现有配置(铅笔图标)
验证
Name
:socialpubsync-reverse
-
选择
Enabled
复选框 -
选择
Save
-
-
重复 对于每个发布实例
-
5.AdobeGranite分发 — 差异观察器工厂 diffobserver
启用组同步
-
在每个发布实例上 :
-
使用管理员权限登录
-
访问 Web控制台
-
定位
Adobe Granite Distribution - Diff Observer Factory
-
选择要打开以进行编辑的现有配置(铅笔图标)
验证
agent name
:socialpubsync-reverse
-
选择
Enabled
复选框 -
选择
Save
-
-
6. Apache Sling Distribution Trigger — 计划触发器工厂 apache-sling-distribution-trigger-scheduled-triggers-factory
(可选)修改轮询间隔
默认情况下,作者每30秒对更改进行一次轮询。 要更改此间隔,请执行以下操作:
-
在作者
-
使用管理员权限登录
-
访问 Web控制台
-
定位
Apache Sling Distribution Trigger - Scheduled Triggers Factory
-
选择要打开以进行编辑的现有配置(铅笔图标)
- 验证
Name
:socialpubsync-scheduled-trigger
- 验证
-
设置
Interval in Seconds
到所需的间隔 -
选择
Save
-
-
为多个发布实例配置 configure-for-multiple-publish-instances
默认配置适用于单个发布实例。 由于启用用户同步的原因是同步多个发布实例(如发布场),因此需要将其他发布实例添加到同步代理工厂。
7. Apache Sling Distribution Agent — 同步代理工厂 apache-sling-distribution-agent-sync-agents-factory-1
添加发布实例:
-
在作者
-
使用管理员权限登录
-
访问 Web控制台
-
定位
Apache Sling Distribution Agent - Sync Agents Factory
-
选择要打开以进行编辑的现有配置(铅笔图标)
验证
Name
:socialpubsync
-
-
-
导出程序端点
每个发布者都应有一个导出程序端点。 例如,如果有2个发布者,localhost:4503和4504,则应有2个条目:- http://localhost:4503/libs/sling/distribution/services/exporters/socialpubsync-reverse
- http://localhost:4504/libs/sling/distribution/services/exporters/socialpubsync-reverse
-
导入程序端点
每个发布者都应有一个导入器端点。 例如,如果有2个发布者,localhost:4503和4504,则应有2个条目:- http://localhost:4503/libs/sling/distribution/services/importers/socialpubsync
- http://localhost:4504/libs/sling/distribution/services/importers/socialpubsync
-
选择
Save
8.AEM Communities用户同步侦听器 aem-communities-user-sync-listener
(可选)同步其他JCR节点
如果需要在多个发布实例之间同步自定义数据,则:
-
在每个发布实例上:
-
使用管理员权限登录
-
访问 Web控制台
-
定位
AEM Communities User Sync Listener
-
选择要打开以进行编辑的现有配置(铅笔图标)
验证
Name
:socialpubsync-scheduled-trigger
-
-
节点类型
这是要同步的节点类型列表。 除sling:Folder以外的任何节点类型都需要在此处列出(sling:folder是单独处理的)。
要同步的节点类型的默认列表:
- rep:User
- nt:unstructured
- nt:resource
-
可忽略属性
这是在检测到任何更改时将忽略的属性列表。 对这些属性所做的更改可能会作为其他更改的副作用进行同步(因为同步始终位于节点级别),但对这些属性所做的更改本身不会触发同步。
要忽略的默认属性:
- cq:lastModified
-
可忽略节点
在同步过程中将完全忽略的子路径。 这些子路径下的任何内容将随时进行同步。
要忽略的默认节点:
- .tokens
- system
-
分布式文件夹
大多数sling:文件夹会被忽略,因为不需要同步。 此处列出了少数例外。
要同步的默认文件夹
- 区段/评分
- 社交/关系
- 活动
9.唯一Sling ID unique-sling-id
如果发布场中多个发布实例的Sling ID相同,则不会同步用户组。
要验证所有Sling ID值是否都不同,请在每个发布实例上:
- 浏览
http://<host>:<port>/system/console/status-slingsettings
- 检查的值 Sling ID
如果发布实例的Sling ID与任何其他发布实例的Sling ID匹配,则:
-
停止一个具有匹配Sling ID的发布实例
-
在crx-quickstart/launchpad/felix目录中
-
搜索并删除名为 sling.id.file
-
例如,在Linux系统上:
rm -i $(find . -type f -name sling.id.file)
-
例如,在Windows系统上:
use windows explorer and search for *sling.id.file*
-
-
-
启动发布实例
- 启动时,会为其分配一个新的Sling ID
-
验证 Sling ID 现在是唯一的
重复这些步骤,直到所有发布实例都具有唯一的Sling ID。
保管库包生成器工厂 vault-package-builder-factory
要正确同步更新,需要修改电子仓库包生成器以进行用户同步:
-
在每个AEM发布实例上
-
访问 Web控制台
-
找到
Apache Sling Distribution Packaging - Vault Package Builder Factor
Builder name: socialpubsync-vlt
-
选择编辑图标
-
添加2
Package Filters
:/home/users|-.*/.tokens
/home/users|-.*/rep:cache
-
策略处理:
-
要用新节点覆盖现有rep:policy节点,请添加第三个包过滤器:
/home/users|+.*/rep:policy
-
防止策略被分发,
Acl Handling :
IGNORE
-
当…… what-happens-when
用户在发布时自注册或编辑配置文件 user-self-registers-or-edits-profile-on-publish
根据设计,在发布环境中创建的用户和配置文件(自注册)不会显示在创作环境中。
当拓扑为 发布场 和用户同步的配置正确,*user *和 用户配置文件 会使用Sling分发在发布场中同步。
使用安全控制台创建用户或组 users-or-user-groups-are-created-using-security-console
根据设计,在发布环境中创建的用户数据不会显示在创作环境中,反之亦然。
当 用户管理和安全 控制台用于在发布环境中添加新用户,用户同步会将新用户及其组成员资格同步到其他发布实例(如果需要)。 用户同步还将同步通过安全控制台创建的用户组。
疑难解答 troubleshooting
如何使用户同步脱机 how-to-take-user-sync-offline
要将用户同步脱机,请 删除发布者 或 手动同步数据,则分发队列必须为空且安静。
要检查分发队列的状态,请执行以下操作:
-
作者:
-
使用 CRXDE Lite
-
在中查找条目
/var/sling/distribution/packages
- 使用模式命名的文件夹节点
distrpackage_*
- 使用模式命名的文件夹节点
-
-
使用 包管理器
-
查找挂起的包(尚未安装)
- 以模式命名
socialpubsync-vlt*
- 创建者
communities-user-admin
- 以模式命名
-
-
当分发队列为空时,禁用用户同步:
-
在作者
- 取消选中
Enabled
复选框 Apache Sling Distribution Agent — 同步代理工厂
- 取消选中
任务完成后,要重新启用用户同步,请执行以下操作:
-
在作者
- 检查
Enabled
复选框 Apache Sling Distribution Agent — 同步代理工厂
- 检查
使用同步诊断 user-sync-diagnostics
“用户同步诊断”是一个工具,用于检查配置并尝试识别任何问题。
在创作时,只需从主控制台导航到 工具、操作、诊断、用户同步诊断。
只需进入用户同步诊断控制台,即会显示结果。
这是未启用用户同步时显示的内容:
如何为发布者运行诊断程序 how-to-run-diagnostics-for-publishers
从创作环境运行诊断时,通过/失败结果将包括 [信息] 显示已配置的用于确认的发布实例列表的部分。
列表中包含每个发布实例的URL,该实例将运行该实例的诊断。 url参数 syncUser
附加到诊断URL中,其值设置为 授权同步用户 创建于 步骤2.
注意 :在启动URL之前, 授权同步用户 必须已登录到该发布实例。
配置添加不正确 improperconfig
当用户同步失败时,最常见的问题是额外配置 添加. 相反,现有 默认配置应该 编辑.
以下是编辑后默认配置在Web控制台中的显示方式。 如果出现多个实例,则应删除添加的配置。
(作者)一个Apache Sling Distribution Agent — 同步代理工厂 author-one-apache-sling-distribution-agent-sync-agents-factory
(作者)一个AdobeGranite分发 — 加密密码传输密钥提供程序 author-one-adobe-granite-distribution-encrypted-password-transport-secret-provider
(发布)一个Apache Sling Distribution Agent — 队列代理工厂 publish-one-apache-sling-distribution-agent-queue-agents-factory
(发布)一个AdobeGranite Distribution — 差异观察器工厂 publish-one-adobe-granite-distribution-diff-observer-factory
(作者)一个Apache Sling Distribution触发器 — 计划触发器工厂 author-one-apache-sling-distribution-trigger-scheduled-triggers-factory
在响应处理期间修改操作异常 modify-operation-exception-during-response-processing
如果日志中显示以下内容:
org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing.
java.lang.IllegalStateException: This tree does not exist
然后验证部分 2. 创建授权用户 正确跟踪。
本节介绍如何创建一个位于所有发布实例上的授权用户,并在创作的“密钥提供程序”OSGi配置中标识该用户。 默认情况下,用户为 admin
.
授权用户应成为 administrators
不应更改该群组的用户群组和权限。
授权用户应在所有发布实例上明确具有以下权限和限制:
作为 administrators
组中,授权用户应具有以下所有发布实例的权限:
用户组同步失败 user-group-sync-failed
如果Sling ID在两个或更多发布实例之间匹配,则用户组同步将失败。
请参阅部分 9. 唯一Sling ID
手动同步用户和用户组 manually-syncing-users-and-user-groups
-
在存在用户和组的发布者上:
-
创建资源包 of
/home
-
编辑包时
- 过滤器选项卡:添加过滤器:根路径:
/home
- 高级选项卡:交流处理:
Overwrite
- 过滤器选项卡:添加过滤器:根路径:
-
-
在其他发布实例上:
要配置或启用用户同步,请转到步骤1: Apache Sling Distribution Agent — 同步代理工厂
发布者不可用时 when-a-publisher-becomes-unavailable
当发布实例不可用时,如果它将来恢复为联机,则不应将其删除。 更改将排入发布者的队列,一旦它重新联机,将处理更改。
如果发布实例永远不会恢复为联机状态,如果它永久处于脱机状态,则必须删除该实例,因为队列累积将导致在创作环境中显着占用磁盘空间。
当发布者关闭时,创作日志将出现与类似的异常:
28.01.2016 15:57:48.475 ERROR
[pool-12-thread-34-org_apache_sling_distribution_queue_socialpubsync_endpoint1
(org/apache/sling/distribution/queue/socialpubsync/endpoint1)]
org.apache.sling.distribution.agent.impl.SimpleDistributionAgent [agent][socialpubsync] could not deliver package distrpackage_1454014575838_a2b45ec8-0400-42f3-bed8-ae09b66381cb
org.apache.sling.distribution.packaging.DistributionPackageImportException: failed in importing package ...
如何删除发布者 how-to-remove-a-publisher
从 Apache Sling Distribution Agent — 同步代理工厂,则分发队列必须为空且安静。
-
在作者上:
-
关注 步骤7 要从两个服务器列表中删除发布者,请执行以下操作:
Exporter Endpoints
Importer Endpoints
-
重新启用用户同步
- 检查
Enabled
复选框 Apache Sling Distribution Agent — 同步代理工厂
- 检查