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