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 <[email protected]> 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
