You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2021/09/09 10:17:23 UTC

[sling-org-apache-sling-resourceresolver] branch master updated: SLING-10447 Adjust query so that sling:vanityPath properties are not searched in the JCR version storage

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git


The following commit(s) were added to refs/heads/master by this push:
     new ea9a345  SLING-10447 Adjust query so that sling:vanityPath properties are not searched in the JCR version storage
ea9a345 is described below

commit ea9a34577edf7eff53b5a8f8bd4f1417a72af5aa
Author: Henry Kuijpers <He...@amplexor.com>
AuthorDate: Thu Aug 26 13:10:17 2021 +0200

    SLING-10447 Adjust query so that sling:vanityPath properties are not searched in the JCR version storage
---
 .../resourceresolver/impl/mapping/MapEntries.java      | 18 ++++++++++++++----
 .../impl/mapping/InMemoryResourceProvider.java         |  2 +-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index 3047d30..9568dab 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -86,7 +86,10 @@ public class MapEntries implements
 
     public static final int DEFAULT_DEFAULT_VANITY_PATH_REDIRECT_STATUS = HttpServletResponse.SC_FOUND;
 
-    private static final String JCR_SYSTEM_PREFIX = "/jcr:system/";
+    @SuppressWarnings("java:S1075") // Repository path
+    private static final String JCR_SYSTEM_PATH = "/jcr:system";
+
+    private static final String JCR_SYSTEM_PREFIX = JCR_SYSTEM_PATH + '/';
 
    static final String ALIAS_BASE_QUERY_DEFAULT = "SELECT sling:alias FROM nt:base AS page";
 
@@ -816,8 +819,12 @@ public class MapEntries implements
         Map<String, List<MapEntry>> entryMap = new HashMap<>();
 
                 // sling:vanityPath (lowercase) is the property name
-        final String queryString = "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus FROM nt:base WHERE sling:vanityPath ="
-                + "'"+escapeIllegalXpathSearchChars(vanityPath).replaceAll("'", "''")+"' OR sling:vanityPath ="+ "'"+escapeIllegalXpathSearchChars(vanityPath.substring(1)).replaceAll("'", "''")+"' ORDER BY sling:vanityOrder DESC";
+        final String queryString = "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus" +
+            " FROM nt:base" +
+            " WHERE NOT isdescendantnode('" + JCR_SYSTEM_PATH + "') and (" +
+            "sling:vanityPath ='"+escapeIllegalXpathSearchChars(vanityPath).replaceAll("'", "''")+"'" +
+            " OR sling:vanityPath ="+ "'"+escapeIllegalXpathSearchChars(vanityPath.substring(1)).replaceAll("'", "''")+"'" +
+            ") ORDER BY sling:vanityOrder DESC";
 
         ResourceResolver queryResolver = null;
 
@@ -1156,7 +1163,10 @@ public class MapEntries implements
     private Map <String, List<String>> loadVanityPaths(boolean createVanityBloomFilter) {
         // sling:vanityPath (lowercase) is the property name
         final Map <String, List<String>> targetPaths = new ConcurrentHashMap <>();
-        final String queryString = "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus FROM nt:base WHERE sling:vanityPath IS NOT NULL";
+        final String queryString = "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus" +
+            " FROM nt:base" +
+            " WHERE NOT isdescendantnode('" + JCR_SYSTEM_PATH + "')" +
+            " AND sling:vanityPath IS NOT NULL";
         final Iterator<Resource> i = resolver.findResources(queryString, "sql");
 
         Supplier<Boolean> isCacheComplete = () -> isAllVanityPathEntriesCached() || vanityCounter.longValue() < this.factory.getMaxCachedVanityPathEntries();
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
index 57ebaeb..235b37a 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
@@ -104,7 +104,7 @@ public class InMemoryResourceProvider extends ResourceProvider<Void>{
                         .iterator();
                 }
                 
-                if ( "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus FROM nt:base WHERE sling:vanityPath IS NOT NULL".equals(query) ) {
+                if ( "SELECT sling:vanityPath, sling:redirect, sling:redirectStatus FROM nt:base WHERE NOT isdescendantnode('/jcr:system') AND sling:vanityPath IS NOT NULL".equals(query) ) {
                     return resourcesWithProperty(ctx, "sling:vanityPath")
                         .iterator();                  
                 }