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();
}