This is an automated email from the ASF dual-hosted git repository.
yuqi1129 pushed a commit to branch branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-1.3 by this push:
new 2a3b473ded [Cherry-pick to branch-1.3] [#11360] fix(server): Ignore
quote-only custom filter entries (#11361) (#11427)
2a3b473ded is described below
commit 2a3b473dedb7e79c2c2f595dd8b8aa998c17e361
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jun 5 09:21:10 2026 +0800
[Cherry-pick to branch-1.3] [#11360] fix(server): Ignore quote-only custom
filter entries (#11361) (#11427)
**Cherry-pick Information:**
- Original commit: 44d01f47b605b6328b092b405509929d598cc010
- Target branch: `branch-1.3`
- Status: ✅ Clean cherry-pick (no conflicts)
Co-authored-by: Xu Bai <[email protected]>
---
.../gravitino/server/web/JettyServerConfig.java | 17 ++++++++-----
.../server/web/TestJettyServerConfig.java | 29 +++++++++++++++++++---
2 files changed, 37 insertions(+), 9 deletions(-)
diff --git
a/server-common/src/main/java/org/apache/gravitino/server/web/JettyServerConfig.java
b/server-common/src/main/java/org/apache/gravitino/server/web/JettyServerConfig.java
index ec77fa9548..cb7a5b27e6 100644
---
a/server-common/src/main/java/org/apache/gravitino/server/web/JettyServerConfig.java
+++
b/server-common/src/main/java/org/apache/gravitino/server/web/JettyServerConfig.java
@@ -25,9 +25,12 @@ import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.net.ssl.SSLContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.gravitino.Config;
@@ -207,12 +210,13 @@ public final class JettyServerConfig {
.stringConf()
.createWithDefault("JKS");
- public static final ConfigEntry<Optional<String>> CUSTOM_FILTERS =
+ public static final ConfigEntry<List<String>> CUSTOM_FILTERS =
new ConfigBuilder("customFilters")
.doc("Comma separated list of filter class names to apply to the
APIs")
.version(ConfigConstants.VERSION_0_4_0)
.stringConf()
- .createWithOptional();
+ .toSequence()
+ .createWithDefault(Collections.emptyList());
public static final ConfigEntry<Boolean> ENABLE_CORS_FILTER =
new ConfigBuilder("enableCorsFilter")
.doc("Enable cross origin resource share filter")
@@ -375,10 +379,11 @@ public final class JettyServerConfig {
this.enableClientAuth = internalConfig.get(ENABLE_CLIENT_AUTH);
this.customFilters =
- internalConfig
- .get(CUSTOM_FILTERS)
- .map(filters ->
Collections.unmodifiableSet(Sets.newHashSet(filters.split(SPLITTER))))
- .orElse(Collections.emptySet());
+ Collections.unmodifiableSet(
+ internalConfig.get(CUSTOM_FILTERS).stream()
+ .filter(filter -> !filter.equals("\"\""))
+ .filter(filter -> !filter.equals("''"))
+ .collect(Collectors.toCollection(() -> new
LinkedHashSet<>())));
this.keyStoreType = internalConfig.get(SSL_KEYSTORE_TYPE);
this.trustStoreType = internalConfig.get(SSL_TRUST_STORE_TYPE);
diff --git
a/server-common/src/test/java/org/apache/gravitino/server/web/TestJettyServerConfig.java
b/server-common/src/test/java/org/apache/gravitino/server/web/TestJettyServerConfig.java
index 992f9f716c..616d932191 100644
---
a/server-common/src/test/java/org/apache/gravitino/server/web/TestJettyServerConfig.java
+++
b/server-common/src/test/java/org/apache/gravitino/server/web/TestJettyServerConfig.java
@@ -19,7 +19,9 @@
package org.apache.gravitino.server.web;
import com.google.common.collect.Sets;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.apache.gravitino.Config;
@@ -62,12 +64,33 @@ public class TestJettyServerConfig {
@Test
public void testCustomFilters() {
- Config emptyconfig = new Config() {};
- JettyServerConfig jettyServerConfig =
JettyServerConfig.fromConfig(emptyconfig, "");
+ Config emptyConfig = new Config() {};
+ JettyServerConfig jettyServerConfig =
JettyServerConfig.fromConfig(emptyConfig, "");
+ Assertions.assertNotNull(jettyServerConfig.getCustomFilters());
Assertions.assertTrue(jettyServerConfig.getCustomFilters().isEmpty());
+ Config quotedEmptyConfig = new Config() {};
+ quotedEmptyConfig.set(JettyServerConfig.CUSTOM_FILTERS, List.of("\"\""));
+ jettyServerConfig = JettyServerConfig.fromConfig(quotedEmptyConfig, "");
+ Assertions.assertNotNull(jettyServerConfig.getCustomFilters());
+ Assertions.assertTrue(jettyServerConfig.getCustomFilters().isEmpty());
+
+ Config singleQuotedEmptyConfig = new Config() {};
+ singleQuotedEmptyConfig.set(JettyServerConfig.CUSTOM_FILTERS,
List.of("''"));
+ jettyServerConfig = JettyServerConfig.fromConfig(singleQuotedEmptyConfig,
"");
+ Assertions.assertNotNull(jettyServerConfig.getCustomFilters());
+ Assertions.assertTrue(jettyServerConfig.getCustomFilters().isEmpty());
+
+ Config mixedEmptyConfig = new Config() {};
+ mixedEmptyConfig.set(
+ JettyServerConfig.CUSTOM_FILTERS,
+ Arrays.asList(" 1", " ", "", " \"\" ", " '' ", "", " 2 "));
+ jettyServerConfig = JettyServerConfig.fromConfig(mixedEmptyConfig, "");
+ Assertions.assertIterableEquals(
+ Sets.newHashSet("1", "2"), jettyServerConfig.getCustomFilters());
+
Config somethingConfig = new Config() {};
- somethingConfig.set(JettyServerConfig.CUSTOM_FILTERS, Optional.of("1,2"));
+ somethingConfig.set(JettyServerConfig.CUSTOM_FILTERS, List.of("1,2"));
somethingConfig.set(new ConfigBuilder("1.1").stringConf(), "test");
somethingConfig.set(new ConfigBuilder("1.2").stringConf(), "test");
jettyServerConfig = JettyServerConfig.fromConfig(somethingConfig, "");