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

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


The following commit(s) were added to refs/heads/master by this push:
     new 08e1bdd  SLING-13090 Expose information about wrapped filter in web 
console (#72)
08e1bdd is described below

commit 08e1bdd781be7357ff4132c9a69fc78a181430ea
Author: Konrad Windszus <[email protected]>
AuthorDate: Thu Feb 5 16:26:57 2026 +0100

    SLING-13090 Expose information about wrapped filter in web console (#72)
---
 pom.xml                                            |  6 ++++
 .../impl/console/WebConsoleConfigPrinter.java      |  4 ++-
 .../sling/engine/impl/filter/FilterHandle.java     |  9 ++++++
 .../engine/impl/filter/ServletFilterManager.java   | 33 +++++++++++++---------
 .../engine/impl/filter/SlingFilterChainHelper.java |  6 ++--
 .../impl/filter/AbstractSlingFilterChainTest.java  |  2 +-
 .../sling/engine/impl/filter/FilterHandleTest.java |  6 ++--
 .../impl/filter/SlingFilterChainHelperTest.java    | 10 +++----
 8 files changed, 51 insertions(+), 25 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7a3bbb0..37961e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -179,6 +179,12 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>2.0.17</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
diff --git 
a/src/main/java/org/apache/sling/engine/impl/console/WebConsoleConfigPrinter.java
 
b/src/main/java/org/apache/sling/engine/impl/console/WebConsoleConfigPrinter.java
index 69aa666..3ccce17 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/console/WebConsoleConfigPrinter.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/console/WebConsoleConfigPrinter.java
@@ -115,7 +115,9 @@ public class WebConsoleConfigPrinter {
             pw.printf(
                     "%d : %s (id: %d, property: %s); called: %d; time: %dms; 
time/call: %dµs%n",
                     entry.getOrder(),
-                    entry.getFilter().getClass(),
+                    entry.getWrappedJavaxFilter()
+                            .map(f -> "Jakarta wrapper for " + f.getClass())
+                            .orElse(entry.getFilter().getClass().toString()),
                     entry.getFilterId(),
                     entry.getOrderSource(),
                     entry.getCalls(),
diff --git 
a/src/main/java/org/apache/sling/engine/impl/filter/FilterHandle.java 
b/src/main/java/org/apache/sling/engine/impl/filter/FilterHandle.java
index 3df0f0e..0c8ea25 100644
--- a/src/main/java/org/apache/sling/engine/impl/filter/FilterHandle.java
+++ b/src/main/java/org/apache/sling/engine/impl/filter/FilterHandle.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.engine.impl.filter;
 
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 
 import jakarta.servlet.Filter;
@@ -27,6 +28,8 @@ public class FilterHandle implements Comparable<FilterHandle> 
{
 
     private final Filter filter;
 
+    private javax.servlet.Filter wrappedJavaxFilter;
+
     private final long filterId;
 
     private final int order;
@@ -43,12 +46,14 @@ public class FilterHandle implements 
Comparable<FilterHandle> {
 
     FilterHandle(
             Filter filter,
+            javax.servlet.Filter wrappedJavaxFilter,
             FilterPredicate predicate,
             long filterId,
             int order,
             final String orderSource,
             FilterProcessorMBeanImpl mbean) {
         this.filter = filter;
+        this.wrappedJavaxFilter = wrappedJavaxFilter;
         this.predicate = predicate;
         this.filterId = filterId;
         this.order = order;
@@ -62,6 +67,10 @@ public class FilterHandle implements 
Comparable<FilterHandle> {
         return filter;
     }
 
+    public Optional<javax.servlet.Filter> getWrappedJavaxFilter() {
+        return Optional.ofNullable(wrappedJavaxFilter);
+    }
+
     public long getFilterId() {
         return filterId;
     }
diff --git 
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java 
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
index 22e59f0..d3c97be 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
@@ -132,7 +132,7 @@ public class ServletFilterManager {
             cardinality = ReferenceCardinality.MULTIPLE,
             target = "(" + EngineConstants.SLING_FILTER_SCOPE + "=*)")
     public void bindFilter(final ServiceReference<Filter> reference, final 
Filter filter) {
-        initFilter(reference, filter);
+        initFilter(reference, filter, null);
     }
 
     public void updatedFilter(final ServiceReference<Filter> reference, final 
Filter service) {
@@ -140,10 +140,10 @@ public class ServletFilterManager {
         final String newFilterName = SlingFilterConfig.getName(reference);
         if (newFilterName.equals(getUsedFilterName(reference))) {
             removeFilterFromChains((Long) 
reference.getProperty(Constants.SERVICE_ID));
-            addFilterToChains(service, reference);
+            addFilterToChains(service, null, reference);
         } else {
             destroyFilter(reference, service);
-            initFilter(reference, service);
+            initFilter(reference, service, null);
         }
     }
 
@@ -163,7 +163,7 @@ public class ServletFilterManager {
         @SuppressWarnings({"rawtypes", "unchecked"})
         final ServiceReference<Filter> ref = (ServiceReference<Filter>) 
(ServiceReference) reference;
         final Filter s = JavaxToJakartaFilterWrapper.toJakartaFilter(filter);
-        initFilter(ref, s);
+        initFilter(ref, s, filter);
     }
 
     public void updatedJavaxFilter(
@@ -175,10 +175,10 @@ public class ServletFilterManager {
         final String newFilterName = SlingFilterConfig.getName(ref);
         if (newFilterName.equals(getUsedFilterName(ref))) {
             removeFilterFromChains((Long) 
reference.getProperty(Constants.SERVICE_ID));
-            addFilterToChains(s, ref);
+            addFilterToChains(s, service, ref);
         } else {
             destroyFilter(ref, s);
-            initFilter(ref, s);
+            initFilter(ref, s, service);
         }
     }
 
@@ -190,7 +190,10 @@ public class ServletFilterManager {
         destroyFilter(ref, s);
     }
 
-    private void initFilter(final ServiceReference<Filter> reference, final 
Filter filter) {
+    private void initFilter(
+            final ServiceReference<Filter> reference,
+            final Filter filter,
+            final javax.servlet.Filter wrappedJavaxFilter) {
         final String filterName = SlingFilterConfig.getName(reference);
         final Long serviceId = (Long) 
reference.getProperty(Constants.SERVICE_ID);
 
@@ -198,7 +201,7 @@ public class ServletFilterManager {
 
             MBeanReg reg;
             try {
-                final Dictionary<String, String> mbeanProps = new 
Hashtable<String, String>();
+                final Dictionary<String, String> mbeanProps = new 
Hashtable<>();
                 mbeanProps.put(JMX_OBJECTNAME, 
"org.apache.sling:type=engine-filter,service=" + filterName);
                 reg = new MBeanReg();
                 reg.mbean = new FilterProcessorMBeanImpl();
@@ -219,7 +222,7 @@ public class ServletFilterManager {
             filter.init(config);
 
             // add to chains
-            addFilterToChains(filter, reference);
+            addFilterToChains(filter, wrappedJavaxFilter, reference);
         } catch (ServletException ce) {
             log.error("Filter " + filterName + " failed to initialize", ce);
         } catch (Throwable t) {
@@ -261,7 +264,10 @@ public class ServletFilterManager {
     }
 
     @SuppressWarnings("deprecation")
-    private void addFilterToChains(final Filter filter, final 
ServiceReference<Filter> reference) {
+    private void addFilterToChains(
+            final Filter filter,
+            final javax.servlet.Filter wrappedJavaxFilter,
+            final ServiceReference<Filter> reference) {
         final Long serviceId = (Long) 
reference.getProperty(Constants.SERVICE_ID);
         final MBeanReg mbeanReg = mbeanMap.get(serviceId);
         final FilterProcessorMBeanImpl mbean = mbeanReg == null ? null : 
mbeanReg.mbean;
@@ -316,13 +322,14 @@ public class ServletFilterManager {
             scope = scope.toUpperCase();
             try {
                 FilterChainType type = 
FilterChainType.valueOf(scope.toString());
-                getFilterChain(type).addFilter(filter, predicate, serviceId, 
order, orderSource, mbean);
+                getFilterChain(type)
+                        .addFilter(filter, wrappedJavaxFilter, predicate, 
serviceId, order, orderSource, mbean);
 
                 if (type == FilterChainType.COMPONENT) {
                     getFilterChain(FilterChainType.INCLUDE)
-                            .addFilter(filter, predicate, serviceId, order, 
orderSource, mbean);
+                            .addFilter(filter, wrappedJavaxFilter, predicate, 
serviceId, order, orderSource, mbean);
                     getFilterChain(FilterChainType.FORWARD)
-                            .addFilter(filter, predicate, serviceId, order, 
orderSource, mbean);
+                            .addFilter(filter, wrappedJavaxFilter, predicate, 
serviceId, order, orderSource, mbean);
                 }
                 used = true;
             } catch (final IllegalArgumentException iae) {
diff --git 
a/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java 
b/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java
index 33c74ba..ce2e045 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java
@@ -35,13 +35,14 @@ public class SlingFilterChainHelper {
 
     private static final FilterHandle[] EMPTY_FILTER_ARRAY = new 
FilterHandle[0];
 
-    private final SortedSet<FilterHandle> filterList = new 
TreeSet<FilterHandle>();
+    private final SortedSet<FilterHandle> filterList = new TreeSet<>();
 
     private volatile FilterHandle[] filters = EMPTY_FILTER_ARRAY;
 
     /**
      * Add a filter
      * @param filter The filter
+     * @param wrappedJavaxFilter The wrapped javax.servlet.Filter (may be null)
      * @param pattern Optional pattern
      * @param filterId Id of the filter
      * @param order The order index
@@ -50,12 +51,13 @@ public class SlingFilterChainHelper {
      */
     public synchronized void addFilter(
             final Filter filter,
+            javax.servlet.Filter wrappedJavaxFilter,
             FilterPredicate pattern,
             final long filterId,
             final int order,
             final String orderSource,
             FilterProcessorMBeanImpl mbean) {
-        this.filterList.add(new FilterHandle(filter, pattern, filterId, order, 
orderSource, mbean));
+        this.filterList.add(new FilterHandle(filter, wrappedJavaxFilter, 
pattern, filterId, order, orderSource, mbean));
         this.filters = getFiltersInternal();
     }
 
diff --git 
a/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
 
b/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
index fe64096..7c39565 100644
--- 
a/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
+++ 
b/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
@@ -56,7 +56,7 @@ public class AbstractSlingFilterChainTest extends 
AbstractFilterTest {
             public void destroy() {}
         };
 
-        FilterHandle handle = new FilterHandle(badFilter, null, 1, 1, null, 
null);
+        FilterHandle handle = new FilterHandle(badFilter, null, null, 1, 1, 
null, null);
 
         AbstractSlingFilterChain chain = new AbstractSlingFilterChain(new 
FilterHandle[] {handle}) {
             @Override
diff --git 
a/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java 
b/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
index 94818f2..e9f3fca 100644
--- a/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
@@ -31,15 +31,15 @@ public class FilterHandleTest extends AbstractFilterTest {
      */
     @Test
     public void testSelect() {
-        FilterHandle handle = new FilterHandle(null, predicate(), 0L, 0, "", 
null);
+        FilterHandle handle = new FilterHandle(null, null, predicate(), 0L, 0, 
"", null);
         assertTrue(
                 "filter should be selected when no predicate",
                 handle.select(mockRequest("/content/test/no/predicate", null, 
null, null, null)));
-        handle = new FilterHandle(null, predicate(SLING_FILTER_PATTERN, 
"/content/test/.*"), 0L, 0, "", null);
+        handle = new FilterHandle(null, null, predicate(SLING_FILTER_PATTERN, 
"/content/test/.*"), 0L, 0, "", null);
         assertTrue(
                 "filter should be selected when matching predicate",
                 handle.select(mockRequest("/content/test/matching/predicate", 
null, null, null, null)));
-        handle = new FilterHandle(null, predicate(SLING_FILTER_PATTERN, 
"/content/foo/.*"), 0L, 0, "", null);
+        handle = new FilterHandle(null, null, predicate(SLING_FILTER_PATTERN, 
"/content/foo/.*"), 0L, 0, "", null);
         assertFalse(
                 "filter should not be selected when no matching predicate",
                 
handle.select(mockRequest("/content/test/no/matching/predicate", null, null, 
null, null)));
diff --git 
a/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
 
b/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
index aca3e08..738e6cb 100644
--- 
a/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
+++ 
b/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
@@ -36,11 +36,11 @@ public class SlingFilterChainHelperTest {
     public void testOrdering() {
         final SlingFilterChainHelper chain = new SlingFilterChainHelper();
 
-        chain.addFilter(context.mock(Filter.class, "A"), null, 1L, 100, 
"1:100", null);
-        chain.addFilter(context.mock(Filter.class, "B"), null, 2L, 100, 
"2:100", null);
-        chain.addFilter(context.mock(Filter.class, "C"), null, 3L, -100, 
"3:-100", null);
-        chain.addFilter(context.mock(Filter.class, "D"), null, 4L, -1000, 
"4:-1000", null);
-        chain.addFilter(context.mock(Filter.class, "E"), null, 5L, 1000, 
"5:1000", null);
+        chain.addFilter(context.mock(Filter.class, "A"), null, null, 1L, 100, 
"1:100", null);
+        chain.addFilter(context.mock(Filter.class, "B"), null, null, 2L, 100, 
"2:100", null);
+        chain.addFilter(context.mock(Filter.class, "C"), null, null, 3L, -100, 
"3:-100", null);
+        chain.addFilter(context.mock(Filter.class, "D"), null, null, 4L, 
-1000, "4:-1000", null);
+        chain.addFilter(context.mock(Filter.class, "E"), null, null, 5L, 1000, 
"5:1000", null);
 
         final FilterHandle[] entries = chain.getFilters();
         assertEquals(5, entries.length);

Reply via email to