已通过AccessDeniedException阻止分发队列

当尝试使用快速Publish、管理发布或复制来复制页面内容、XF或其他资源时,创作实例上的分发队列会被阻止。 您可以通过检查分发UI (AEM > Tools > Deployment > Distribution)中的​ 发布 ​分发队列来进行验证。 按照本文档中提供的步骤解决问题。

描述 description

环境

  • Experience Manager
  • Experience Manager即云服务

问题/症状

当尝试使用“快速Publish”、“管理发布”或“复制”复制某些页面内容(或XF和其他类型的资源)时,创作上的分发队列将被 阻止

通过检查分发UI (AEM - Tools - Deployment - Distribution)中的​ 发布 分发队列可以观察到这种情况:






选择Golden Publisher队列(从列表中以粗体显示条目),提供更多详细信息,特别是涉及的 PATH(此处可包含多个元素):





查看 日志 选项卡将显示以下相应错误:

2023/03/08 12:11:26:238 - INFO — 使用分发包PackageMessage(pubSlingId=a1133c97-680 9-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c577-4079-8741-d41660597d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service,paths=[ /content/wknd/fr] , deepPaths=[ ] ),偏移量=158705

2023/03/08 12:11:27:459 - WARN — 消息:尝试导入分发包PackageMessage(pubSlingId=a1133c97-6809-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c57 7-4079-8741-d41660597158705 d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service, paths=[ /content/wknd/fr] , deepPaths=[ ] ),由于“javax.jcr.AccessDeniedException: OakAccess0000000000: Access拒绝”,导入程序将稍后重试

Stacktrace: org.apache.sling.distribution.common.DistributionException: javax.jcr.AccessDeniedException: OakAccess0000:访问被拒绝

[]




您需要​ 清除队列(或移除该项)以取消阻止该队列。

解决方法 resolution

尽管错误为 javax.jcr.AccessDeniedException,但是与分发服务用户的ACL/权限可能没有关系,但如果以下情况不适用于您的情况,则应考虑这一点。

诊断

在某些情况下,当复制的内容确实具有与特殊 jcr:lockIsDeep 属性相关的特定配置时,可能会出现上述错误。

为了确认诊断,您必须使用以下任何可以访问/适用的工具检查 每个提及的路径

  1. 适用于开发实例的CRX/DE
  2. 存储库浏览器
  3. 在包管理器中创建内容包(此选项也是解决方案的一部分)

然后,您需要检查在分发队列UI中找到的每个路径的 jcr:content 节点,并验证是否:

  • 具有 jcr:lockIsDeep="(Boolean)true" 属性
  • 具有 jcr:lockOwner="xxx" 属性
  • it jcr:mixinTypes 中不 具有 mix:lockable 值)

如果是这种情况,则问题已确认,因为 jcr:lockIsDeep 属性不应单独存在。 当 锁定 页面时,此属性应始终与 jcr:lockOwner 一起设置。

仅设置 jcr:lockIsDeep 属性是不可能的,即使使用JCR API也是如此,因此导致此情况的根本原因主要是安装了包含该单个属性的​ 损坏的 ​内容包。

分辨率

要修复内容,唯一的解决方案是在作者中安装包,该包在相应节点上设置了正确的属性。

您可以从具有相应内容的另一个实例创建包,或者,如果受影响的实例上只有此内容,则可以按照以下说明进行操作:

  1. 在损坏的实例上为错误页面生成包
  2. 下载包
  3. 提取page/jcr:content的 .content.xml
  4. 手动删除具有 jcr:lockIsDeep 的行
  5. 使用新的/修复的.content.xml更新包
  6. 重新上传并安装修改后的包

再次检查页面属性,并成功测试复制/分发。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f