调度程序问题|“jcr:content”已更改为“jcr%3acontent”



我们最近在调度器级别遇到了一个问题,其中一个从CQ存储库获取数据的ajax调用中有“jcr:content”,并且被编码为“jcr%3acontent”,导致错误的结果集。

示例:http://x.x.x.x:4502/a/b/jcr:content/par/....

我们已经评估了这个问题的两种可能的解决方案:

  1. 可以在代码级别上修复此问题,其中所有请求都将被路由到一个筛选器,这将确保"jcr%3acontent"更改为"jcr:content"

    优点:这可以快速解决我们现有的问题

    缺点:未来可能会出现其他特殊字符可能导致相同问题的

  2. 由于第1点中讨论的方法存在问题,我们已经检查了一些其他解决方案。经过一些研究,我们发现升级调度器版本解决了这个问题。我们使用的是调度员版本4.1.5的CQ 5.6.,我们将调度员升级为4.1.7。现在为了支持这一点,我们没有任何文件表明这是调度员版本4.1.5 的已知问题

这个社区里有人面临过这个问题吗?如果有,那么同样的解决方案是什么?

还有人能给我指一下记录已知调度员4.1.5问题的地点吗?

请使用ResourceResolver.map()方法获取要使用/发出的get请求的"友好"URL,并使用Dispatcher解决缓存问题。map()方法将":"冒号编码为下划线,resolve()方法则将其解码回SLING JCR可读格式。

您需要使用map()方法来生成Ajax调用中使用的URL。

进一步阅读:http://sling.apache.org/documentation/the-sling-engine/mappings-for-resource-resolution.html#namespace-损毁

总结对上述问题的看法。我在不同的论坛上提出了以下解决方案。

Solution 1

如@Thomas 所述,重写ajax调用以在"jcr:content"上使用"_jcr_content"

Solution 2

正如@viper 所提到的,编写CQ过滤器来进行此检查

Solution 3

Adobe也承认这是调度器版本问题,并建议升级版本,我做到了,它得到了修复。FYI调度员版本从4.1.15升级到4.1.17

最新更新