This is an automated email from the ASF dual-hosted git repository.
mridulpathak pushed a commit to branch release24.09
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/release24.09 by this push:
new 5fe7f87b17 Remove OFBizDynamicThresholdFilter
5fe7f87b17 is described below
commit 5fe7f87b17f2a30d1ee64e103992b8ad316ee8e6
Author: Mridul Pathak <[email protected]>
AuthorDate: Sat Oct 24 23:43:34 2026 +0530
Remove OFBizDynamicThresholdFilter
The filter was declared for the whole Log4j configuration, so it ran on
every logging call, building a new context data map each time, only to keep the
getJs requests at the ERROR level. It also relied on internal Log4j classes and
on the plugin package scanning in log4j2.xml. With it go the ThreadContext
"uri" entries set by ControlFilter and CatalogUrlFilter. The getJs requests now
log like any other request.
Thanks: Jacopo Cappellato for the suggestion
---
.../ofbiz/product/category/CatalogUrlFilter.java | 15 +-
dependencies.gradle | 2 +-
framework/base/config/log4j2.xml | 6 +-
.../base/log4j/OFBizDynamicThresholdFilter.java | 264 ---------------------
.../apache/ofbiz/webapp/control/ControlFilter.java | 10 +-
5 files changed, 5 insertions(+), 292 deletions(-)
diff --git
a/applications/product/src/main/java/org/apache/ofbiz/product/category/CatalogUrlFilter.java
b/applications/product/src/main/java/org/apache/ofbiz/product/category/CatalogUrlFilter.java
index 13ef0afc3b..6f9c6f97af 100644
---
a/applications/product/src/main/java/org/apache/ofbiz/product/category/CatalogUrlFilter.java
+++
b/applications/product/src/main/java/org/apache/ofbiz/product/category/CatalogUrlFilter.java
@@ -33,7 +33,6 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.logging.log4j.ThreadContext;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.StringUtil.StringWrapper;
@@ -345,18 +344,8 @@ public class CatalogUrlFilter implements Filter {
//Check path alias
UrlServletHelper.checkPathAlias(request, httpResponse, delegator,
pathInfo);
}
- try {
- String uriWithContext = httpRequest.getRequestURI();
- String context = httpRequest.getContextPath();
- String uri = uriWithContext.substring(context.length());
- // support OFBizDynamicThresholdFilter in log4j2.xml
- ThreadContext.put("uri", uri);
-
- // we're done checking; continue on
- chain.doFilter(request, response);
- } finally {
- ThreadContext.remove("uri");
- }
+ // we're done checking; continue on
+ chain.doFilter(request, response);
}
@Override
diff --git a/dependencies.gradle b/dependencies.gradle
index cd0385e2e8..73cb9e4018 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -47,7 +47,7 @@ dependencies {
implementation 'org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1'
implementation 'org.apache.httpcomponents:httpclient-cache:4.5.14'
implementation 'org.apache.logging.log4j:log4j-api:2.26.1' // the API of
log4j 2
- implementation 'org.apache.logging.log4j:log4j-core:2.26.1' // Somehow
needed by Buildbot to compile OFBizDynamicThresholdFilter.java
+ implementation 'org.apache.logging.log4j:log4j-core:2.26.1' // the
implementation of log4j 2, declared here so that the ldap plugin does not bring
version 2.12.1 at compile time
implementation 'org.apache.poi:poi:4.1.2' // poi-ooxml-schemas-5.0.0.pom'.
Received status code 401 from server
implementation 'org.apache.pdfbox:pdfbox:3.0.8'
implementation 'org.apache.pdfbox:pdfbox-io:3.0.8'
diff --git a/framework/base/config/log4j2.xml b/framework/base/config/log4j2.xml
index 6ce27b8166..3e56ea2785 100644
--- a/framework/base/config/log4j2.xml
+++ b/framework/base/config/log4j2.xml
@@ -17,11 +17,7 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
-<Configuration monitorInterval="60" packages="org.apache.ofbiz.base.log4j">
- <OFBizDynamicThresholdFilter key="uri" onMatch="ACCEPT" onMismatch="DENY">
- <KeyValuePair key="/getJs" value="ERROR"/>
- <KeyValuePair key="/control/getJs" value="ERROR"/>
- </OFBizDynamicThresholdFilter>
+<Configuration monitorInterval="60">
<!--
Default configuration for logging; for customizations refer to
http://logging.apache.org/log4j/2.x/manual/configuration.html.
diff --git
a/framework/base/src/main/java/org/apache/ofbiz/base/log4j/OFBizDynamicThresholdFilter.java
b/framework/base/src/main/java/org/apache/ofbiz/base/log4j/OFBizDynamicThresholdFilter.java
deleted file mode 100644
index 5e8e56075d..0000000000
---
a/framework/base/src/main/java/org/apache/ofbiz/base/log4j/OFBizDynamicThresholdFilter.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*******************************************************************************
- * 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.ofbiz.base.log4j;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.core.ContextDataInjector;
-import org.apache.logging.log4j.core.Filter;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.core.config.Node;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.filter.AbstractFilter;
-import org.apache.logging.log4j.core.impl.ContextDataFactory;
-import org.apache.logging.log4j.core.impl.ContextDataInjectorFactory;
-import org.apache.logging.log4j.util.StringMap;
-import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.message.Message;
-import org.apache.logging.log4j.util.PerformanceSensitive;
-import org.apache.logging.log4j.util.ReadOnlyStringMap;
-import org.apache.ofbiz.base.util.Debug;
-
-/**
- * Adapted from {@link
org.apache.logging.log4j.core.filter.DynamicThresholdFilter}
- * Check for active individual levels instead of default threshold
- */
-@Plugin(name = "OFBizDynamicThresholdFilter", category = Node.CATEGORY,
elementType = Filter.ELEMENT_TYPE, printObject = true)
-@PerformanceSensitive("allocation")
-public final class OFBizDynamicThresholdFilter extends AbstractFilter {
-
- /**
- * Creates a DynamicThresholdFilter.
- * @param key The name of the key to compare.
- * @param pairs An array of value and Level pairs.
- * @param onMatch The action to perform if a match occurs.
- * @param onMismatch The action to perform if no match occurs.
- * @return The DynamicThresholdFilter.
- */
- // TODO Consider refactoring to use AbstractFilter.AbstractFilterBuilder
- @PluginFactory
- public static OFBizDynamicThresholdFilter createFilter(
- @PluginAttribute("key") final String key,
- @PluginElement("Pairs") final KeyValuePair[] pairs,
- @PluginAttribute("onMatch") final Result onMatch,
- @PluginAttribute("onMismatch") final Result onMismatch) {
- final Map<String, Level> map = new HashMap<>();
- for (final KeyValuePair pair : pairs) {
- map.put(pair.getKey(), Level.toLevel(pair.getValue()));
- }
- return new OFBizDynamicThresholdFilter(key, map, onMatch, onMismatch);
- }
-
- private final String key;
- private final ContextDataInjector injector =
ContextDataInjectorFactory.createInjector();
- private Map<String, Level> levelMap = new HashMap<>();
-
- private OFBizDynamicThresholdFilter(final String key, final Map<String,
Level> pairs,
- final Result onMatch, final Result
onMismatch) {
- super(onMatch, onMismatch);
- Objects.requireNonNull(key, "key cannot be null");
- this.key = key;
- this.levelMap = pairs;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (!super.equalsImpl(obj)) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final OFBizDynamicThresholdFilter other =
(OFBizDynamicThresholdFilter) obj;
- if (key == null) {
- if (other.key != null) {
- return false;
- }
- } else if (!key.equals(other.key)) {
- return false;
- }
- if (levelMap == null) {
- if (other.levelMap != null) {
- return false;
- }
- } else if (!levelMap.equals(other.levelMap)) {
- return false;
- }
- return true;
- }
-
- private Result filter(final Level level, final ReadOnlyStringMap
contextMap) {
- final String value = contextMap.getValue(key);
- Level ctxLevel = null;
- if (value != null && !"".equals(value)) {
- ctxLevel = levelMap.get(value);
- }
- if (ctxLevel == null) {
- return Result.NEUTRAL;
- }
- int intLevel = level.intLevel() / 100;
- boolean isOn = Debug.isOn(intLevel) &&
level.isMoreSpecificThan(ctxLevel);
- return isOn ? onMatch : onMismatch;
- }
-
- @Override
- public Result filter(final LogEvent event) {
- return filter(event.getLevel(), event.getContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final Message msg,
- final Throwable t) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final Object msg,
- final Throwable t) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object... params) {
- return filter(level, currentContextData());
- }
-
- private ReadOnlyStringMap currentContextData() {
- StringMap contextData = ContextDataFactory.createContextData();
- return injector.injectContextData(null, contextData);
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4, final Object p5) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4, final Object p5, final Object p6) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4, final Object p5, final Object p6,
- final Object p7) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4, final Object p5, final Object p6,
- final Object p7, final Object p8) {
- return filter(level, currentContextData());
- }
-
- @Override
- public Result filter(final Logger logger, final Level level, final Marker
marker, final String msg,
- final Object p0, final Object p1, final Object p2,
final Object p3,
- final Object p4, final Object p5, final Object p6,
- final Object p7, final Object p8, final Object p9) {
- return filter(level, currentContextData());
- }
-
- public String getKey() {
- return this.key;
- }
-
- public Map<String, Level> getLevelMap() {
- return levelMap;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = super.hashCodeImpl();
- result = prime * result + ((key == null) ? 0 : key.hashCode());
- result = prime * result + ((levelMap == null) ? 0 :
levelMap.hashCode());
- return result;
- }
-
- @Override
- public String toString() {
- final StringBuilder sb = new StringBuilder();
- sb.append("key=").append(key);
- sb.append(", ");
- if (levelMap.size() > 0) {
- sb.append('{');
- boolean first = true;
- for (final Map.Entry<String, Level> entry : levelMap.entrySet()) {
- if (!first) {
- sb.append(", ");
- first = false;
- }
- sb.append(entry.getKey()).append('=').append(entry.getValue());
- }
- sb.append('}');
- }
- return sb.toString();
- }
-}
diff --git
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlFilter.java
b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlFilter.java
index f4293bf93b..c84abace04 100644
---
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlFilter.java
+++
b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlFilter.java
@@ -41,7 +41,6 @@ import javax.servlet.http.HttpSession;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.apache.commons.validator.routines.UrlValidator;
-import org.apache.logging.log4j.ThreadContext;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilHttp;
@@ -238,14 +237,7 @@ public class ControlFilter extends HttpFilter {
// Check if the requested URI is allowed.
if (allowedPaths.stream().anyMatch(uri::startsWith)) {
- try {
- // support OFBizDynamicThresholdFilter in log4j2.xml
- ThreadContext.put("uri", uri);
-
- chain.doFilter(req, resp);
- } finally {
- ThreadContext.remove("uri");
- }
+ chain.doFilter(req, resp);
} else {
if (redirectPath == null) {
resp.sendError(errorCode, uriWithContext);