com.day.cq.search.impl.builder.QueryBuilderImpl上的ResourceResolver未关闭警告

了解如何解决位于com.day.cq.search.impl.builder.QueryBuilderImpl的ResourceResolver未关闭警告。

描述 description

环境

AEM 6.5

问题/症状

源自QueryBuilderImpl类的日志中存在未关闭的会话警告: 11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread]


11.01.2018 01:03:18.878 *INFO* [ Apache Sling资源解析器终结器线程] org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl未关闭的ResourceResolver创建于此处:



java.lang.Exception:在org.apache.sling.resourceresolver.impl.resolver.impl.CommonCommonCommonResolver.Resolver打开的Stacktrace



resourceResolverFactoryImpl$ResolverReference.< init> (CommonResourceResolverFactoryImpl.java:521)



位于org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.register(CommonResourceResolverFactoryImpl.java:218)



位于org.apache.sling.resourceresolver.impl.ResolverImpl.< 在org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<处初始化> (ResourceResolverImpl.java:101)



init> (ResourceResolverImpl.java:94)



在org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:263)



在org.apache.sling.resourceresolver.impl.CommonResourceResolver resourceResolverFactoryImpl.java:173)



在org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.java:105)



在com.day.cq.se arch.impl.builder.QueryBuilderImpl.createResourceResolver(Builder.java:210)



impl.getResourceResolver(QueryImpl.java:231)



在com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)



在com.day.cq.search.writer.SimpleHitWriter.writer.writeSimpleJson(SimpleHitWriter.java:54)



在com.day.cq.se.write(SimpleHitWriter writer.java:41)



在com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.writeHits(QueryBuilderJsonServlet.java:165)



在com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)



)



在2}在2}com.day.cq.search jsonServlet.java:73)



在org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)



在org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java{2Java:140){2MayService){2Sling.api.servlet.servlet.2Service slingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346)



在org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)



在org.apache.sling.engine.impl.requestData.service(RequestData.Service(Data.java:552))



在org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)

解决方法 resolution

在实时AEM网站上,Dispatcher建议阻止/bin/querybuilder URL。

这些URL可在(面向内部网络的)创作实例上安全使用,但在实时站点上,它可能会打开系统以泄露数据。

此错误的解决方法是避免使用 /bin/querybuilder servlet,而改用QueryBuilder API

调用API后,在处理查询结果后手动关闭ResourceResolver

请在此处查找示例代码例如,以下代码泄露了资源解析程序:

Query query = queryBuilder.createQuery(…,会话);
SearchResult = query.getResult();
for (点击点击: result.getHits())) {
//do一些处理
}

解决方法代码:


//解决方法:关闭内部资源解析程序
迭代器<资源>资源= result.getResources();
if (resources.hasNext()) {
resources.next()。getResourceResolver()。close();
}

recommendation-more-help
experience-cloud-kcs-help-kbarticles