You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/04/06 14:25:31 UTC
[sling-org-apache-sling-scripting-bundle-tracker] 01/01:
SLING-9336: filter servlet services with a hook.
This is an automated email from the ASF dual-hosted git repository.
pauls pushed a commit to branch issues/SLING-9336
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-bundle-tracker.git
commit be3ad23646694f9af17697bc1243a6c11c945b6d
Author: Karl Pauls <kp...@adobe.com>
AuthorDate: Mon Apr 6 16:25:12 2020 +0200
SLING-9336: filter servlet services with a hook.
---
.../bundle/tracker/internal/BundledHooks.java | 64 ++++++++++++++++++++++
.../tracker/internal/BundledScriptTracker.java | 2 +
2 files changed, 66 insertions(+)
diff --git a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java
new file mode 100644
index 0000000..f3d968a
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java
@@ -0,0 +1,64 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+package org.apache.sling.scripting.bundle.tracker.internal;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.hooks.service.EventListenerHook;
+import org.osgi.framework.hooks.service.FindHook;
+import org.osgi.framework.hooks.service.ListenerHook;
+import org.osgi.service.component.annotations.Component;
+
+@Component
+public class BundledHooks implements FindHook, EventListenerHook
+{
+ @Override
+ public void find(BundleContext context, String name, String filter, boolean allServices, Collection<ServiceReference<?>> references)
+ {
+ if (!context.getBundle().getSymbolicName().equals("org.apache.sling.servlets.resolver"))
+ {
+ for (Iterator<ServiceReference<?>> iter = references.iterator(); iter.hasNext();)
+ {
+ if (iter.next().getProperty(BundledHooks.class.getName()) != null)
+ {
+ iter.remove();
+ }
+ }
+ }
+ }
+
+
+ @Override
+ public void event(ServiceEvent event, Map<BundleContext, Collection<ListenerHook.ListenerInfo>> listeners)
+ {
+ if (event.getServiceReference().getProperty(BundledHooks.class.getName()) != null)
+ {
+ for (Iterator<Map.Entry<BundleContext, Collection<ListenerHook.ListenerInfo>>> entries = listeners.entrySet().iterator(); entries.hasNext();) {
+ if (!entries.next().getKey().getBundle().getSymbolicName().equals("org.apache.sling.servlets.resolver")) {
+ entries.remove();
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
index 5d51820..df959d0 100644
--- a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
+++ b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
@@ -182,6 +182,7 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
if (executable.getPath().equals(servletCapability.getPath())) {
properties.put(ServletResolverConstants.SLING_SERVLET_PATHS, executable.getPath());
}
+ properties.put(BundledHooks.class.getName(), "true");
regs.add(
bundle.getBundleContext().registerService(
Servlet.class,
@@ -238,6 +239,7 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
"=" + rt + "; " +
ServletResolverConstants.SLING_SERVLET_EXTENSIONS + "=" + extensions + "; " +
ServletResolverConstants.SLING_SERVLET_METHODS + "=" + methods + "}");
+ properties.put(BundledHooks.class.getName(), "true");
reg = registeringBundle.orElse(m_context).registerService(Servlet.class, new DispatcherServlet(rt), properties);
} else {
if (!new HashSet<>(Arrays.asList(PropertiesUtil