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

zhongjiajie pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 309c8c97a9 [Enhancement][API]Enhance mysql connection properties 
(#15433)
309c8c97a9 is described below

commit 309c8c97a9b9003244496dedc7861a5026f9441a
Author: lgcareer <[email protected]>
AuthorDate: Sat Jan 6 19:25:08 2024 +0800

    [Enhancement][API]Enhance mysql connection properties (#15433)
---
 .../mysql/param/MySQLDataSourceProcessor.java      | 58 +++++++++++-----------
 .../mysql/param/MySQLDataSourceProcessorTest.java  |  2 +-
 .../mysql/utils/DataSourceUtilsTest.java           |  2 +-
 3 files changed, 30 insertions(+), 32 deletions(-)

diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
index 997b9c2567..c1b91e5930 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
@@ -33,10 +33,9 @@ import org.apache.commons.collections4.MapUtils;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -55,9 +54,6 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
 
     private static final String ALLOW_URL_IN_LOCAL_IN_FILE_NAME = 
"allowUrlInLocalInfile";
 
-    private static final String APPEND_PARAMS =
-            
"allowLoadLocalInfile=false&autoDeserialize=false&allowLocalInfile=false&allowUrlInLocalInfile=false";
-
     @Override
     public BaseDataSourceParamDTO castDatasourceParamDTO(String paramJson) {
         return JSONUtils.parseObject(paramJson, MySQLDataSourceParamDTO.class);
@@ -119,11 +115,7 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
     @Override
     public String getJdbcUrl(ConnectionParam connectionParam) {
         MySQLConnectionParam mysqlConnectionParam = (MySQLConnectionParam) 
connectionParam;
-        String jdbcUrl = mysqlConnectionParam.getJdbcUrl();
-        if (MapUtils.isNotEmpty(mysqlConnectionParam.getOther())) {
-            return String.format("%s?%s&%s", jdbcUrl, 
transformOther(mysqlConnectionParam.getOther()), APPEND_PARAMS);
-        }
-        return String.format("%s?%s", jdbcUrl, APPEND_PARAMS);
+        return mysqlConnectionParam.getJdbcUrl();
     }
 
     @Override
@@ -140,7 +132,32 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
             log.warn("sensitive param : {} in password field is filtered", 
AUTO_DESERIALIZE);
             password = password.replace(AUTO_DESERIALIZE, "");
         }
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), user, 
password);
+
+        Properties connectionProperties = 
getConnectionProperties(mysqlConnectionParam, user, password);
+
+        return DriverManager.getConnection(getJdbcUrl(connectionParam), 
connectionProperties);
+    }
+
+    private Properties getConnectionProperties(MySQLConnectionParam 
mysqlConnectionParam, String user,
+                                               String password) {
+        Properties connectionProperties = new Properties();
+        connectionProperties.put("user", user);
+        connectionProperties.put("password", password);
+        Map<String, String> paramMap = mysqlConnectionParam.getOther();
+        if (MapUtils.isNotEmpty(paramMap)) {
+            paramMap.forEach((k, v) -> {
+                if (!checkKeyIsLegitimate(k)) {
+                    log.info("Key `{}` is not legitimate for security reason", 
k);
+                    return;
+                }
+                connectionProperties.put(k, v);
+            });
+        }
+        connectionProperties.put(AUTO_DESERIALIZE, "false");
+        connectionProperties.put(ALLOW_LOAD_LOCAL_IN_FILE_NAME, "false");
+        connectionProperties.put(ALLOW_LOCAL_IN_FILE_NAME, "false");
+        connectionProperties.put(ALLOW_URL_IN_LOCAL_IN_FILE_NAME, "false");
+        return connectionProperties;
     }
 
     @Override
@@ -158,25 +175,6 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
         return SQLParserUtils.splitAndRemoveComment(sql, 
com.alibaba.druid.DbType.mysql);
     }
 
-    private String transformOther(Map<String, String> paramMap) {
-        if (MapUtils.isEmpty(paramMap)) {
-            return null;
-        }
-        Map<String, String> otherMap = new HashMap<>();
-        paramMap.forEach((k, v) -> {
-            if (!checkKeyIsLegitimate(k)) {
-                return;
-            }
-            otherMap.put(k, v);
-        });
-        if (MapUtils.isEmpty(otherMap)) {
-            return null;
-        }
-        List<String> otherList = new ArrayList<>();
-        otherMap.forEach((key, value) -> otherList.add(String.format("%s=%s", 
key, value)));
-        return String.join("&", otherList);
-    }
-
     private static boolean checkKeyIsLegitimate(String key) {
         return !key.contains(ALLOW_LOAD_LOCAL_IN_FILE_NAME)
                 && !key.contains(AUTO_DESERIALIZE)
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessorTest.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessorTest.java
index 6a533eac0c..f4a00c1e45 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessorTest.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessorTest.java
@@ -80,7 +80,7 @@ public class MySQLDataSourceProcessorTest {
         MySQLConnectionParam mysqlConnectionParam = new MySQLConnectionParam();
         mysqlConnectionParam.setJdbcUrl("jdbc:mysql://localhost:3306/default");
         Assertions.assertEquals(
-                
"jdbc:mysql://localhost:3306/default?allowLoadLocalInfile=false&autoDeserialize=false&allowLocalInfile=false&allowUrlInLocalInfile=false",
+                "jdbc:mysql://localhost:3306/default",
                 mysqlDatasourceProcessor.getJdbcUrl(mysqlConnectionParam));
     }
 
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/utils/DataSourceUtilsTest.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/utils/DataSourceUtilsTest.java
index 8a065e2e6c..71f1b77449 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/utils/DataSourceUtilsTest.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/test/java/org/apache/dolphinscheduler/plugin/datasource/mysql/utils/DataSourceUtilsTest.java
@@ -117,7 +117,7 @@ public class DataSourceUtilsTest {
         mysqlConnectionParam.setJdbcUrl("jdbc:mysql://localhost:3308");
         String jdbcUrl = DataSourceUtils.getJdbcUrl(DbType.MYSQL, 
mysqlConnectionParam);
         Assertions.assertEquals(
-                
"jdbc:mysql://localhost:3308?allowLoadLocalInfile=false&autoDeserialize=false&allowLocalInfile=false&allowUrlInLocalInfile=false",
+                "jdbc:mysql://localhost:3308",
                 jdbcUrl);
     }
 

Reply via email to