已通过AccessDeniedException阻止分发队列
描述 description
环境
- Experience Manager
- Experience Manager as a cloud service
问题/症状
当尝试使用“快速发布”、“管理发布”或“复制”复制某些页面内容(或XF和其他类型的资源)时,作者上的分发队列将获得 已阻止.
可以通过检查 发布 分发UI中的分发队列(AEM — 工具 — 部署 — 分发):
选择Golden Publisher队列(列表中的粗体条目),将提供更多详细信息,特别是所涉及的内容 路径 (此处可能有多个元素):
查看 日志 选项卡将显示以下相应错误:
2023/03/08 12:11:26:238 - INFO — 使用分发包PackageMessage(pubSlingId=a1133c97-6809-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c577-4079-8741-d41660597d20, pkgType=journal_fileval ault, pkgLength=6330, pubAgentName=publish, userId=replication-service, paths=/content/wknd/fr, deepPaths=) at offset=158705 2023/03/08 12:11:27:459 - WARN — 消息:尝试导入分发包PackageMessage(pubSlingId=a1133c97-6809-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=) at offset=158705,原因是“javax.jcr.AccessDeniedException: OakAccess000:Access被拒绝”,导入程序将稍后重试,Stacktrace: org.apache.sling.distribuiling.distribution.common.DistributionException: javax.javax.jcr.jcr.AccessDenitionDenitionExceptionException: Access0 000:访问被拒绝……
您需要 清除队列 (或删除该项目)以取消阻止队列。
解决方法 resolution
尽管出现错误 javax.jcr.AccessDeniedException
,则可能与分发服务用户的ACL/权限无关,但如果以下情况不适用于您的情况,则应考虑这一点。
诊断
在某些情况下,当复制的内容确实具有与特殊目录相关的特定配置时,可能会出现上述错误 jcr:lockIsDeep 属性。
为了确认诊断,您必须检查 每个提及的路径 ,并提供以下任何您可访问/适用的工具:
- 适用于开发实例的CRX/DE
- 该 存储库浏览器
- 在包管理器中创建内容包(此选项也是解决方案的一部分)
然后您需要检查 jcr:content
分发队列UI中找到的每个路径的节点,并验证是否:
- It 是 有一个
jcr:lockIsDeep
="(Boolean)true" 属性 - It 不会 有一个
jcr:lockOwner="xxx"
属性 - ( it 不会 有一个
mix:lockable
中的值jcr:mixinTypes
)
如果是这种情况,问题将得到确认,因为 jcr:lockIsDeep
属性不应单独存在。 此属性应始终与 jcr:lockOwner
时间 锁定 一个页面。
不能只设置 jcr:lockIsDeep
属性,即使使用JCR API,因此解释此情况的根本原因主要是使用单个属性安装了“损坏的”内容包。
分辨率
要修复内容,唯一的解决方案是在作者中安装包,该包在相应节点上设置了正确的属性。
您可以从具有相应内容的另一个实例创建包,或者,如果受影响的实例上只有此内容,则可以按照以下说明进行操作:
- 在已损坏的实例上为错误页面生成包
- 下载包
- 提取
.content.xml
对于page/jcr:content - 使用手动删除行 jcr:lockIsDeep
- 使用新的/修复的.content.xml更新包
- 重新上传并安装修改后的包
然后,您可以再次检查页面属性,并成功测试复制/分发。