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.ResourceResolverImpl。<
init>
(ResourceResolverImpl.java:101)
在org.apache.sling.resourceresolver.impl.ResourceResolverImpl。<
init>
(ResourceResolverImpl.java:94)
在org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:263)
在org.apache.sling.resourcerver.impl.CommonResourceResolverFactoryImpl.getResourceResolver olver(CommonResourceResolverFactoryImpl.java:173)
在org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.java:105)
在com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(Querver){BuilderImpl.java:2Impl){6在com.day.cq.search.impl.builder.QueryImpl.getResourceResolver(QueryImpl.java:231)
在com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)
在com.day.cq.search.writer.SimpleHitWriter.writer在com.day.cq.search.writer.SimpleHitWriter.write .java:41)
在com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.writeHits(QueryBuilderJsonServlet.java:165)
在com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)
在com.day.cq.search.arch get(QueryBuilderJsonServlet.java:73)
在org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)
在org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingServlet.java:1140)
在org.aph ache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346)
在org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)
在org.apache.sling.engine.engine.engine.impl.request.request.data.request.data.java:552){18 {在org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)
解决方法 resolution
在实时AEM网站上,建议调度程序阻止 /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();
}