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

github-merge-queue[bot] pushed a commit to branch 
gh-readonly-queue/dev/pr-12040-82413637863aed8d245443bf3698f692373eff7a
in repository https://gitbox.apache.org/repos/asf/seatunnel.git

commit 136b12d32bc257776804c9adf1ad6ce8a7c4b31f
Author: Arvin <[email protected]>
AuthorDate: Sun Oct 11 09:43:11 2026 +0000

    [Feature][Connector-V2] Fix HTTP credential handling - add scheme check and 
exclude token from toString (#12040)
    
    Co-authored-by: zhang-arvin <[email protected]>
---
 .../seatunnel/airtable/sink/AirtableSink.java      |  1 +
 .../source/config/AirtableSourceParameter.java     |  1 +
 .../seatunnel/http/config/HttpParameter.java       | 88 +++++++++++++++++++++-
 .../connectors/seatunnel/http/sink/HttpSink.java   |  1 +
 .../config/HttpParameterCredentialSchemeTest.java  | 86 +++++++++++++++++++++
 .../github/config/GithubSourceParameter.java       |  1 +
 .../source/config/GitlabSourceParameter.java       |  1 +
 .../jira/source/config/JiraSourceParameter.java    |  1 +
 .../source/config/KlaviyoSourceParameter.java      |  1 +
 .../source/config/LemlistSourceParameter.java      |  1 +
 .../source/config/MyHoursSourceParameter.java      |  1 +
 .../source/config/NotionSourceParameter.java       |  1 +
 .../source/config/OneSignalSourceParameter.java    |  1 +
 .../source/config/PersistiqSourceParameter.java    |  1 +
 .../source/config/PostHogSourceParameter.java      |  1 +
 .../source/config/StripeSourceParameter.java       |  1 +
 .../source/config/ZendeskSourceParameter.java      |  1 +
 17 files changed, 188 insertions(+), 1 deletion(-)

diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java
index ae3bf36aa3..c73c1097df 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java
@@ -58,6 +58,7 @@ public class AirtableSink extends 
AbstractSimpleSink<SeaTunnelRow, Void>
         this.httpParameter = new HttpParameter();
         this.httpParameter.setUrl(AirtableConfig.buildBaseUrl(apiBaseUrl, 
baseId, table));
         this.httpParameter.setHeaders(AirtableConfig.buildAuthHeaders(token, 
null));
+        this.httpParameter.validateCredentialScheme();
 
         this.batchSize = pluginConfig.get(AirtableSinkOptions.BATCH_SIZE);
         this.typecast = pluginConfig.get(AirtableSinkOptions.TYPECAST);
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java
index 811550dfca..55d9f633f2 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java
@@ -50,6 +50,7 @@ public class AirtableSourceParameter extends HttpParameter {
 
         String token = pluginConfig.get(AirtableSourceOptions.TOKEN);
         this.setHeaders(AirtableConfig.buildAuthHeaders(token, getHeaders()));
+        validateCredentialScheme();
 
         this.setBody(buildRequestBody(pluginConfig, this.getBody()));
     }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java
index 94493a6c60..29418a48aa 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java
@@ -17,19 +17,42 @@
 
 package org.apache.seatunnel.connectors.seatunnel.http.config;
 
+import org.apache.seatunnel.shade.org.apache.commons.lang3.StringUtils;
+
 import org.apache.seatunnel.api.configuration.ReadonlyConfig;
 
 import lombok.Data;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
 
 import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 @Data
+@Slf4j
 @SuppressWarnings("MagicNumber")
 public class HttpParameter implements Serializable {
+
+    /** Header names (lower-case) that are treated as carrying credentials for 
scheme validation. */
+    private static final Set<String> KNOWN_CREDENTIAL_HEADERS =
+            new HashSet<>(
+                    Arrays.asList(
+                            "authorization",
+                            "proxy-authorization",
+                            "private-token",
+                            "x-api-key",
+                            "api-key",
+                            "x-auth-token",
+                            "x-token",
+                            "x-access-token"));
+
     protected String url;
     protected HttpRequestMethod method;
-    protected Map<String, String> headers;
+    @ToString.Exclude protected Map<String, String> headers;
     protected Map<String, String> params;
     protected Map<String, Object> pageParams;
     protected boolean keepParamsAsForm = false;
@@ -63,6 +86,8 @@ public class HttpParameter implements Serializable {
         if (pluginConfig.getOptional(HttpCommonOptions.HEADERS).isPresent()) {
             this.setHeaders(pluginConfig.get(HttpCommonOptions.HEADERS));
         }
+        // validate credential scheme after url and headers are set
+        validateCredentialScheme();
         // set params
         if (pluginConfig.getOptional(HttpCommonOptions.PARAMS).isPresent()) {
             this.setParams(pluginConfig.get(HttpCommonOptions.PARAMS));
@@ -87,4 +112,65 @@ public class HttpParameter implements Serializable {
         this.setJsonFiledMissedReturnNull(
                 
pluginConfig.get(HttpSourceOptions.JSON_FILED_MISSED_RETURN_NULL));
     }
+
+    /**
+     * Validates that the URL scheme is HTTPS when credential headers are 
present. Logs a warning if
+     * the URL uses plain HTTP while authorization headers are configured, as 
this would send
+     * credentials in clear text over the network.
+     *
+     * <p>Detection matches against a small allow-list of well-known 
credential header names (for
+     * example {@code Authorization}, {@code PRIVATE-TOKEN}, {@code 
x-api-key}) in addition to any
+     * keys passed explicitly by the caller, so connectors whose credential 
header is not literally
+     * named {@code Authorization} (GitLab, PersistIQ, ...) are still covered.
+     */
+    public void validateCredentialScheme(String... credentialHeaderKeys) {
+        if (StringUtils.isBlank(this.url)) {
+            return;
+        }
+        String lowerUrl = this.url.toLowerCase();
+        if (lowerUrl.startsWith("https://";)) {
+            return;
+        }
+        if (this.headers == null || this.headers.isEmpty()) {
+            return;
+        }
+        Set<String> credentialKeys = new HashSet<>(KNOWN_CREDENTIAL_HEADERS);
+        if (credentialHeaderKeys != null) {
+            for (String key : credentialHeaderKeys) {
+                if (key != null) {
+                    credentialKeys.add(key.toLowerCase());
+                }
+            }
+        }
+        if (hasCredentialHeader(credentialKeys)) {
+            log.warn(
+                    "The HTTP connector URL '{}' uses a non-HTTPS scheme while 
credential headers are configured. "
+                            + "Credentials will be transmitted in clear text 
over the network. "
+                            + "Consider using HTTPS for production 
environments.",
+                    this.url);
+        }
+    }
+
+    /**
+     * Package-private detection helper: returns whether any configured header 
key is in {@code
+     * credentialKeys}. Exposed separately from {@link 
#validateCredentialScheme(String...)} so the
+     * detection can be unit-tested without capturing log output.
+     */
+    boolean hasCredentialHeader(Set<String> credentialKeys) {
+        if (this.headers == null || this.headers.isEmpty()) {
+            return false;
+        }
+        return this.headers.keySet().stream()
+                .anyMatch(key -> key != null && 
credentialKeys.contains(key.toLowerCase()));
+    }
+
+    /** Returns whether the configured credential detection would flag this 
parameter. */
+    boolean hasCredentialHeader() {
+        return hasCredentialHeader(new HashSet<>(KNOWN_CREDENTIAL_HEADERS));
+    }
+
+    /** @return the built-in set of header names treated as credentials. */
+    static Set<String> knownCredentialHeaders() {
+        return Collections.unmodifiableSet(KNOWN_CREDENTIAL_HEADERS);
+    }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java
index d6ab48aa87..d9b68e3580 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java
@@ -57,6 +57,7 @@ public class HttpSink extends 
AbstractSimpleSink<SeaTunnelRow, Void>
             httpParameter.setRequestIntervalMs(
                     pluginConfig.get(HttpSinkOptions.REQUEST_INTERVAL_MS));
         }
+        httpParameter.validateCredentialScheme();
         this.catalogTable = catalogTable;
         this.seaTunnelRowType = catalogTable.getSeaTunnelRowType();
     }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java
new file mode 100644
index 0000000000..211fb6d67f
--- /dev/null
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.seatunnel.connectors.seatunnel.http.config;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+class HttpParameterCredentialSchemeTest {
+
+    private static HttpParameter parameter(String url, String... headerKeys) {
+        HttpParameter p = new HttpParameter();
+        p.setUrl(url);
+        Map<String, String> headers = new HashMap<>();
+        for (String key : headerKeys) {
+            headers.put(key, "secret-value");
+        }
+        p.setHeaders(headers);
+        return p;
+    }
+
+    @Test
+    void testAuthorizationHeaderIsDetected() {
+        Assertions.assertTrue(
+                parameter("http://example.com";, 
"Authorization").hasCredentialHeader());
+        Assertions.assertTrue(
+                parameter("http://example.com";, 
"authorization").hasCredentialHeader());
+    }
+
+    @Test
+    void testNonAuthorizationCredentialHeadersAreDetected() {
+        // Regression for the substring-only check: these header names never 
contained
+        // "authorization" and were previously silently uncovered.
+        Assertions.assertTrue(
+                parameter("http://example.com";, 
"PRIVATE-TOKEN").hasCredentialHeader());
+        Assertions.assertTrue(parameter("http://example.com";, 
"x-api-key").hasCredentialHeader());
+        Assertions.assertTrue(parameter("http://example.com";, 
"api-key").hasCredentialHeader());
+    }
+
+    @Test
+    void testNonCredentialHeaderIsNotDetected() {
+        Assertions.assertFalse(parameter("http://example.com";, 
"Accept").hasCredentialHeader());
+        Assertions.assertFalse(
+                parameter("http://example.com";, 
"Content-Type").hasCredentialHeader());
+        
Assertions.assertFalse(parameter("http://example.com";).hasCredentialHeader());
+    }
+
+    @Test
+    void testExplicitCredentialKeyIsDetected() {
+        HttpParameter p = parameter("http://example.com";, "X-Custom-Token");
+        Assertions.assertTrue(
+                p.hasCredentialHeader(
+                        new 
java.util.HashSet<>(Collections.singletonList("x-custom-token"))));
+    }
+
+    @Test
+    void testValidateCredentialSchemeDoesNotThrow() {
+        // The validator only logs; it must not throw for any scheme/header 
combination.
+        Assertions.assertDoesNotThrow(
+                () -> parameter("http://example.com";, 
"PRIVATE-TOKEN").validateCredentialScheme());
+        Assertions.assertDoesNotThrow(
+                () -> parameter("https://example.com";, 
"Authorization").validateCredentialScheme());
+        Assertions.assertDoesNotThrow(
+                () -> 
parameter("http://example.com";).validateCredentialScheme());
+        Assertions.assertDoesNotThrow(
+                () -> parameter(null, 
"Authorization").validateCredentialScheme());
+    }
+}
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java
index e75a9a6245..dcffd51f8c 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java
@@ -38,6 +38,7 @@ public class GithubSourceParameter extends HttpParameter {
             headers.put(GithubSourceOptions.AUTHORIZATION_KEY, oauthToken);
         }
         setHeaders(headers);
+        validateCredentialScheme();
     }
 
     // Format the access token into oauth2 format.
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java
index fd36503b6c..6eadaea2de 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java
@@ -32,5 +32,6 @@ public class GitlabSourceParameter extends HttpParameter {
                 GitlabSourceOptions.PRIVATE_TOKEN,
                 pluginConfig.get(GitlabSourceOptions.ACCESS_TOKEN));
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java
index a2919ec507..9f3bc2a054 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java
@@ -29,5 +29,6 @@ public class JiraSourceParameter extends HttpParameter {
         this.headers = this.getHeaders() == null ? new HashMap<>() : 
this.getHeaders();
         this.headers.put(JiraSourceOptions.AUTHORIZATION, accessToken);
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java
index ac6641d475..bdd856de8f 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java
@@ -37,5 +37,6 @@ public class KlaviyoSourceParameter extends HttpParameter {
                         + pluginConfig.get(KlaviyoSourceOptions.PRIVATE_KEY));
         this.headers.put("revision", 
pluginConfig.get(KlaviyoSourceOptions.REVISION));
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java
index 4b386ab539..8c7798d8ee 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java
@@ -29,5 +29,6 @@ public class LemlistSourceParameter extends HttpParameter {
         this.headers = this.getHeaders() == null ? new HashMap<>() : 
this.getHeaders();
         this.headers.put(LemlistSourceOptions.AUTHORIZATION, accessToken);
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java
index cc11bc3044..d37fb4c3f8 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java
@@ -35,6 +35,7 @@ public class MyHoursSourceParameter extends HttpParameter {
                 MyHoursSourceOptions.AUTHORIZATION,
                 MyHoursSourceOptions.ACCESS_TOKEN_PREFIX + " " + accessToken);
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 
     public void buildWithLoginConfig(ReadonlyConfig pluginConfig) {
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java
index df05a49261..bb247dacf8 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java
@@ -33,5 +33,6 @@ public class NotionSourceParameter extends HttpParameter {
         this.headers.put(
                 NotionSourceOptions.NOTION_VERSION, 
pluginConfig.get(NotionSourceOptions.VERSION));
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java
index 31c0d70911..c99d43aff8 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java
@@ -35,5 +35,6 @@ public class OneSignalSourceParameter extends HttpParameter {
                         + " "
                         + pluginConfig.get(OneSignalSourceOptions.PASSWORD));
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java
index aa703b46c1..2e3a2b5288 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java
@@ -32,5 +32,6 @@ public class PersistiqSourceParameter extends HttpParameter {
         this.headers = this.getHeaders() == null ? new HashMap<>() : 
this.getHeaders();
         this.headers.put(X_API_KEY, 
pluginConfig.get(PersistiqSourceOptions.PASSWORD));
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java
index 393a2f5235..7a066eb9c3 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java
@@ -59,6 +59,7 @@ public class PostHogSourceParameter extends HttpParameter {
         setHeader(headers, ACCEPT, APPLICATION_JSON);
         setHeader(headers, CONTENT_TYPE, APPLICATION_JSON);
         setHeaders(headers);
+        validateCredentialScheme();
 
         Map<String, Object> queryRequest = new LinkedHashMap<>();
         queryRequest.put("kind", "HogQLQuery");
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java
index 400b89451b..4c2080554c 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java
@@ -91,6 +91,7 @@ public class StripeSourceParameter extends HttpParameter {
                 .filter(version -> !version.trim().isEmpty())
                 .ifPresent(version -> requestHeaders.put(STRIPE_VERSION, 
version.trim()));
         setHeaders(requestHeaders);
+        validateCredentialScheme();
 
         Map<String, String> requestParams = new LinkedHashMap<>();
         requestParams.put("limit", Integer.toString(pageSize));
diff --git 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
index 2bc6505c0f..ecaed31357 100644
--- 
a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
+++ 
b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java
@@ -41,5 +41,6 @@ public class ZendeskSourceParameter extends HttpParameter {
                 
Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8));
         this.headers.put(ZendeskSourceOptions.AUTHORIZATION, 
ZendeskSourceOptions.BASIC + encoded);
         this.setHeaders(this.headers);
+        validateCredentialScheme();
     }
 }

Reply via email to