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 <[email protected]>
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();
}