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);