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.resolver.impl.impl.CommonCommonResolver開啟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網站上,建議Dispatcher封鎖 /bin/querybuilder URL。
這些URL可在(面向內部網路的)作者執行個體上安全使用,但在已上線的網站上,它有可能開啟系統以揭露資料。
此錯誤的因應措施是避免使用 /bin/querybuilder servlet,而改用 QueryBuilder API。
呼叫API之後,在處理查詢結果之後手動關閉 ResourceResolver 。
請在此尋找範常式式碼。例如,下列是程式碼洩漏的資源解析器:
Query query = queryBuilder.createQuery(…,工作階段);
SearchResult = query.getResult();
for (點選點選: result.getHits())) {
/do 某些處理
}
因應措施代碼:
//因應措施:關閉內部資源解析器
Iterator<資源>資源= result.getResources();
if (resources.hasNext()) {
resources.next()。getResourceResolver()。close();
}