From b36861bd9da8d53e33296452ed7b895fff36f02d Mon Sep 17 00:00:00 2001 From: hanbingleixue Date: Mon, 4 Mar 2024 19:26:07 +0800 Subject: [PATCH] Fix issues encountered during functional testing Signed-off-by: hanbingleixue --- .../declarers/QueryExecutorImplDeclarer.java | 4 +- .../QueryExecutorImplInterceptor.java | 11 +- .../QueryExecutorImplEnhancementHelper.java | 44 +++---- .../declarers/QueryExecutorImplDeclarer.java | 4 +- .../QueryExecutorImplInterceptor.java | 11 +- .../QueryExecutorImplEnhancementHelper.java | 44 +++---- .../declarers/QueryExecutorImplDeclarer.java | 4 +- .../QueryExecutorImplInterceptor.java | 11 +- .../QueryExecutorImplEnhancementHelper.java | 63 ++++----- ...larer.java => Jdbc2StatementDeclarer.java} | 6 +- ....java => QueryExecutorImplV2Declarer.java} | 6 +- .../QueryExecutorImplV3Declarer.java | 40 ++++++ ...or.java => Jdbc2StatementInterceptor.java} | 24 ++-- .../QueryExecutorImplInterceptor.java | 12 +- .../utils/PostgresqlEnhancementHelper.java | 121 +++++++++++++----- .../utils/ThreadConnectionUtil.java | 16 +-- ....core.plugin.agent.declarer.PluginDeclarer | 5 +- ...ava => Jdbc2StatementInterceptorTest.java} | 6 +- 18 files changed, 253 insertions(+), 179 deletions(-) rename sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/{Jdbc4StatementDeclarer.java => Jdbc2StatementDeclarer.java} (89%) rename sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/{QueryExecutorImplDeclarer.java => QueryExecutorImplV2Declarer.java} (86%) create mode 100644 sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV3Declarer.java rename sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/{Jdbc4StatementInterceptor.java => Jdbc2StatementInterceptor.java} (69%) rename sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/{Jdbc4StatementInterceptorTest.java => Jdbc2StatementInterceptorTest.java} (93%) diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/declarers/QueryExecutorImplDeclarer.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/declarers/QueryExecutorImplDeclarer.java index 02bc87ef39..2d0ace1c22 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/declarers/QueryExecutorImplDeclarer.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/declarers/QueryExecutorImplDeclarer.java @@ -22,7 +22,7 @@ import com.huaweicloud.sermant.opengaussv30.utils.QueryExecutorImplEnhancementHelper; /** - * SQL执行器增强声明器 + * QueryExecutorImpl declarer * * @author zhp * @since 2024-02-04 @@ -35,6 +35,6 @@ public ClassMatcher getClassMatcher() { @Override public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { - return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendQueryInterceptDeclarer()}; + return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendOneQueryInterceptDeclarer()}; } } diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/interceptors/QueryExecutorImplInterceptor.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/interceptors/QueryExecutorImplInterceptor.java index 031f016f18..9a62cb34fc 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/interceptors/QueryExecutorImplInterceptor.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/interceptors/QueryExecutorImplInterceptor.java @@ -24,6 +24,7 @@ import com.huaweicloud.sermant.database.handler.DatabaseHandler; import com.huaweicloud.sermant.database.interceptor.AbstractDatabaseInterceptor; +import org.opengauss.core.ParameterList; import org.opengauss.core.Query; import org.opengauss.core.v3.QueryExecutorImpl; import org.opengauss.util.HostSpec; @@ -31,7 +32,7 @@ import java.util.logging.Logger; /** - * 执行SQL操作的拦截器 + * Interceptor for QueryExecutorImpl sendOneQuery method * * @author zhp * @since 2024-02-04 @@ -40,15 +41,15 @@ public class QueryExecutorImplInterceptor extends AbstractDatabaseInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(); /** - * 无参构造方法 + * Non-parametric construction method */ public QueryExecutorImplInterceptor() { } /** - * 有参构造方法 + * Parameterized construction method * - * @param handler 写操作处理器 + * @param handler Write operation handler */ public QueryExecutorImplInterceptor(DatabaseHandler handler) { this.handler = handler; @@ -59,7 +60,7 @@ public ExecuteContext doBefore(ExecuteContext context) { DatabaseInfo databaseInfo = getDataBaseInfo(context); String database = databaseInfo.getDatabaseName(); Query query = (Query) context.getArguments()[0]; - String sql = query.getNativeSql(); + String sql = query.toString((ParameterList) context.getArguments()[1]); handleWriteOperationIfWriteDisabled(sql, database, DatabaseWriteProhibitionManager.getOpenGaussProhibitionDatabases(), context); return context; diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/utils/QueryExecutorImplEnhancementHelper.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/utils/QueryExecutorImplEnhancementHelper.java index 3f06fb3efe..13e7c2b84c 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/utils/QueryExecutorImplEnhancementHelper.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.0.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv30/utils/QueryExecutorImplEnhancementHelper.java @@ -23,67 +23,61 @@ import com.huaweicloud.sermant.opengaussv30.interceptors.QueryExecutorImplInterceptor; /** - * postgresql拦截点辅助类 + * Helper class for openGauss3.0.x * * @author zhp * @since 2024-02-04 **/ public class QueryExecutorImplEnhancementHelper { - private static final String EXECUTE_METHOD_NAME = "sendQuery"; + private static final String EXECUTE_METHOD_NAME = "sendOneQuery"; private static final String ENHANCE_CLASS_NAME = "org.opengauss.core.v3.QueryExecutorImpl"; private static final String INT_CLASS_NAME = "int"; - private static final String QUERY_CLASS_NAME = "org.opengauss.core.Query"; + private static final String SIMPLE_QUERY_CLASS_NAME = "org.opengauss.core.v3.SimpleQuery"; - private static final String V3_PARAMETER_LIST_CLASS_NAME = "org.opengauss.core.v3.V3ParameterList"; - - private static final String RESULT_HANDLER_CLASS_NAME = "org.opengauss.core.ResultHandler"; - - private static final String BATCH_RESULT_HANDLER_CLASS_NAME = "org.opengauss.jdbc.BatchResultHandler"; + private static final String SIMPLE_PARAMETER_LIST_CLASS_NAME = "org.opengauss.core.v3.SimpleParameterList"; private static final String[] EXECUTE_INTERNAL_METHOD_PARAMS_TYPE = { - QUERY_CLASS_NAME, - V3_PARAMETER_LIST_CLASS_NAME, - INT_CLASS_NAME, + SIMPLE_QUERY_CLASS_NAME, + SIMPLE_PARAMETER_LIST_CLASS_NAME, INT_CLASS_NAME, INT_CLASS_NAME, - RESULT_HANDLER_CLASS_NAME, - BATCH_RESULT_HANDLER_CLASS_NAME + INT_CLASS_NAME }; private QueryExecutorImplEnhancementHelper() { } - private static MethodMatcher getSendQueryMethodMatcher() { + private static MethodMatcher getSendOneQueryMethodMatcher() { return MethodMatcher.nameEquals(EXECUTE_METHOD_NAME) .and(MethodMatcher.paramTypesEqual(EXECUTE_INTERNAL_METHOD_PARAMS_TYPE)); } /** - * 获取QueryExecutorImpl sendQuery方法有参拦截声明器 + * Get the parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer(DatabaseHandler handler) { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer(DatabaseHandler handler) { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); } /** - * 获取QueryExecutorImpl sendQuery方法无参拦截声明器 + * Get the non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer() { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor()); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer() { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor()); } /** - * 获取QueryExecutorImpl类的ClassMatcher + * Get the ClassMatcher of the QueryExecutorImpl class * - * @return ClassMatcher 类匹配器 + * @return ClassMatcher Class matcher */ public static ClassMatcher getQueryExecutorImplClassMatcher() { return ClassMatcher.nameEquals(ENHANCE_CLASS_NAME); diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/declarers/QueryExecutorImplDeclarer.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/declarers/QueryExecutorImplDeclarer.java index 680ab831a0..19073d6209 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/declarers/QueryExecutorImplDeclarer.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/declarers/QueryExecutorImplDeclarer.java @@ -22,7 +22,7 @@ import com.huaweicloud.sermant.opengaussv31.utils.QueryExecutorImplEnhancementHelper; /** - * SQL执行器增强声明器 + * QueryExecutorImpl declarer * * @author zhp * @since 2024-02-04 @@ -35,6 +35,6 @@ public ClassMatcher getClassMatcher() { @Override public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { - return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendQueryInterceptDeclarer()}; + return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendOneQueryInterceptDeclarer()}; } } diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/interceptors/QueryExecutorImplInterceptor.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/interceptors/QueryExecutorImplInterceptor.java index a46d5e557e..e776b00370 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/interceptors/QueryExecutorImplInterceptor.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/interceptors/QueryExecutorImplInterceptor.java @@ -24,6 +24,7 @@ import com.huaweicloud.sermant.database.handler.DatabaseHandler; import com.huaweicloud.sermant.database.interceptor.AbstractDatabaseInterceptor; +import org.postgresql.core.ParameterList; import org.postgresql.core.Query; import org.postgresql.core.v3.QueryExecutorImpl; import org.postgresql.util.HostSpec; @@ -31,7 +32,7 @@ import java.util.logging.Logger; /** - * 执行SQL操作的拦截器 + * Interceptor for QueryExecutorImpl sendOneQuery method * * @author zhp * @since 2024-02-04 @@ -40,15 +41,15 @@ public class QueryExecutorImplInterceptor extends AbstractDatabaseInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(); /** - * 无参构造方法 + * Non-parametric construction method */ public QueryExecutorImplInterceptor() { } /** - * 有参构造方法 + * Parameterized construction method * - * @param handler 写操作处理器 + * @param handler Write operation handler */ public QueryExecutorImplInterceptor(DatabaseHandler handler) { this.handler = handler; @@ -59,7 +60,7 @@ public ExecuteContext doBefore(ExecuteContext context) { DatabaseInfo databaseInfo = getDataBaseInfo(context); String database = databaseInfo.getDatabaseName(); Query query = (Query) context.getArguments()[0]; - String sql = query.getNativeSql(); + String sql = query.toString((ParameterList) context.getArguments()[1]); handleWriteOperationIfWriteDisabled(sql, database, DatabaseWriteProhibitionManager.getOpenGaussProhibitionDatabases(), context); return context; diff --git a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/utils/QueryExecutorImplEnhancementHelper.java b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/utils/QueryExecutorImplEnhancementHelper.java index cd9a7c4201..4039910b4e 100644 --- a/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/utils/QueryExecutorImplEnhancementHelper.java +++ b/sermant-plugins/sermant-database-write-prohibition/opengauss-3.1.x-plugin/src/main/java/com/huaweicloud/sermant/opengaussv31/utils/QueryExecutorImplEnhancementHelper.java @@ -23,67 +23,61 @@ import com.huaweicloud.sermant.opengaussv31.interceptors.QueryExecutorImplInterceptor; /** - * openGauss3.1.x拦截点辅助类 + * Helper class for openGauss3.1.x * * @author zhp * @since 2024-02-04 **/ public class QueryExecutorImplEnhancementHelper { - private static final String EXECUTE_METHOD_NAME = "sendQuery"; + private static final String EXECUTE_METHOD_NAME = "sendOneQuery"; private static final String ENHANCE_CLASS_NAME = "org.postgresql.core.v3.QueryExecutorImpl"; private static final String INT_CLASS_NAME = "int"; - private static final String QUERY_CLASS_NAME = "org.postgresql.core.Query"; + private static final String SIMPLE_QUERY_CLASS_NAME = "org.postgresql.core.v3.SimpleQuery"; - private static final String V3_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v3.V3ParameterList"; - - private static final String RESULT_HANDLER_CLASS_NAME = "org.postgresql.core.ResultHandler"; - - private static final String BATCH_RESULT_HANDLER_CLASS_NAME = "org.postgresql.jdbc.BatchResultHandler"; + private static final String SIMPLE_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v3.SimpleParameterList"; private static final String[] EXECUTE_INTERNAL_METHOD_PARAMS_TYPE = { - QUERY_CLASS_NAME, - V3_PARAMETER_LIST_CLASS_NAME, - INT_CLASS_NAME, + SIMPLE_QUERY_CLASS_NAME, + SIMPLE_PARAMETER_LIST_CLASS_NAME, INT_CLASS_NAME, INT_CLASS_NAME, - RESULT_HANDLER_CLASS_NAME, - BATCH_RESULT_HANDLER_CLASS_NAME + INT_CLASS_NAME }; private QueryExecutorImplEnhancementHelper() { } - private static MethodMatcher getSendQueryMethodMatcher() { + private static MethodMatcher getSendOneQueryMethodMatcher() { return MethodMatcher.nameEquals(EXECUTE_METHOD_NAME) .and(MethodMatcher.paramTypesEqual(EXECUTE_INTERNAL_METHOD_PARAMS_TYPE)); } /** - * 获取QueryExecutorImpl sendQuery方法有参拦截声明器 + * Get the parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer(DatabaseHandler handler) { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer(DatabaseHandler handler) { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); } /** - * 获取QueryExecutorImpl sendQuery方法无参拦截声明器 + * Get the non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer() { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor()); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer() { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor()); } /** - * 获取QueryExecutorImpl类的ClassMatcher + * Get the ClassMatcher of the QueryExecutorImpl class * - * @return ClassMatcher 类匹配器 + * @return ClassMatcher Class matcher */ public static ClassMatcher getQueryExecutorImplClassMatcher() { return ClassMatcher.nameEquals(ENHANCE_CLASS_NAME); diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/declarers/QueryExecutorImplDeclarer.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/declarers/QueryExecutorImplDeclarer.java index 6c7b308da4..70f80f842b 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/declarers/QueryExecutorImplDeclarer.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/declarers/QueryExecutorImplDeclarer.java @@ -22,7 +22,7 @@ import com.huaweicloud.sermant.postgresqlv42.utils.QueryExecutorImplEnhancementHelper; /** - * SQL执行器增强声明器 + * QueryExecutorImpl declarer * * @author zhp * @since 2024-02-04 @@ -35,6 +35,6 @@ public ClassMatcher getClassMatcher() { @Override public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { - return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendQueryInterceptDeclarer()}; + return new InterceptDeclarer[]{QueryExecutorImplEnhancementHelper.getSendOneQueryInterceptDeclarer()}; } } diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/interceptors/QueryExecutorImplInterceptor.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/interceptors/QueryExecutorImplInterceptor.java index c37e7ebc5a..581988a436 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/interceptors/QueryExecutorImplInterceptor.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/interceptors/QueryExecutorImplInterceptor.java @@ -24,6 +24,7 @@ import com.huaweicloud.sermant.database.handler.DatabaseHandler; import com.huaweicloud.sermant.database.interceptor.AbstractDatabaseInterceptor; +import org.postgresql.core.ParameterList; import org.postgresql.core.Query; import org.postgresql.core.v3.QueryExecutorImpl; import org.postgresql.util.HostSpec; @@ -31,7 +32,7 @@ import java.util.logging.Logger; /** - * 执行SQL操作拦截器的测试类 + * Interceptor for QueryExecutorImpl sendOneQuery method * * @author zhp * @since 2024-02-04 @@ -40,15 +41,15 @@ public class QueryExecutorImplInterceptor extends AbstractDatabaseInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(); /** - * 无参构造方法 + * Non-parametric construction method */ public QueryExecutorImplInterceptor() { } /** - * 有参构造方法 + * Parameterized construction method * - * @param handler 写操作处理器 + * @param handler Write operation handler */ public QueryExecutorImplInterceptor(DatabaseHandler handler) { this.handler = handler; @@ -59,7 +60,7 @@ public ExecuteContext doBefore(ExecuteContext context) { DatabaseInfo databaseInfo = getDataBaseInfo(context); String database = databaseInfo.getDatabaseName(); Query query = (Query) context.getArguments()[0]; - String sql = query.toString(); + String sql = query.toString((ParameterList) context.getArguments()[1]); handleWriteOperationIfWriteDisabled(sql, database, DatabaseWriteProhibitionManager.getPostgreSqlProhibitionDatabases(), context); return context; diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/utils/QueryExecutorImplEnhancementHelper.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/utils/QueryExecutorImplEnhancementHelper.java index 696c400e74..9daf5f8fda 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/utils/QueryExecutorImplEnhancementHelper.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-42.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv42/utils/QueryExecutorImplEnhancementHelper.java @@ -23,79 +23,60 @@ import com.huaweicloud.sermant.postgresqlv42.interceptors.QueryExecutorImplInterceptor; /** - * postgresql拦截点辅助类 + * Helper class for postgresql42.x * * @author zhp * @since 2024-02-04 **/ public class QueryExecutorImplEnhancementHelper { - private static final String EXECUTE_METHOD_NAME = "sendQuery"; + private static final String SEND_ONE_QUERY_METHOD_NAME = "sendOneQuery"; private static final String ENHANCE_CLASS_NAME = "org.postgresql.core.v3.QueryExecutorImpl"; private static final String INT_CLASS_NAME = "int"; - private static final String QUERY_CLASS_NAME = "org.postgresql.core.Query"; + private static final String SIMPLE_QUERY_CLASS_NAME = "org.postgresql.core.v3.SimpleQuery"; - private static final String V3_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v3.V3ParameterList"; + private static final String SIMPLE_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v3.SimpleParameterList"; - private static final String RESULT_HANDLER_CLASS_NAME = "org.postgresql.core.ResultHandler"; - - private static final String BATCH_RESULT_HANDLER_CLASS_NAME = "org.postgresql.jdbc.BatchResultHandler"; - - private static final String[] EXECUTE_INTERNAL_METHOD_PARAMS_TYPE_V1 = { - QUERY_CLASS_NAME, - V3_PARAMETER_LIST_CLASS_NAME, - INT_CLASS_NAME, INT_CLASS_NAME, - INT_CLASS_NAME, - RESULT_HANDLER_CLASS_NAME, - BATCH_RESULT_HANDLER_CLASS_NAME - }; - - private static final String BOOLEAN_CLASS_NAME = "boolean"; - - private static final String[] EXECUTE_INTERNAL_METHOD_PARAMS_TYPE_V2 = { - QUERY_CLASS_NAME, - V3_PARAMETER_LIST_CLASS_NAME, + private static final String[] EXECUTE_METHOD_PARAMS_TYPE = { + SIMPLE_QUERY_CLASS_NAME, + SIMPLE_PARAMETER_LIST_CLASS_NAME, INT_CLASS_NAME, INT_CLASS_NAME, - INT_CLASS_NAME, - RESULT_HANDLER_CLASS_NAME, - BATCH_RESULT_HANDLER_CLASS_NAME, - BOOLEAN_CLASS_NAME + INT_CLASS_NAME }; private QueryExecutorImplEnhancementHelper() { } - private static MethodMatcher getSendQueryMethodMatcher() { - return MethodMatcher.nameEquals(EXECUTE_METHOD_NAME) - .and(MethodMatcher.paramTypesEqual(EXECUTE_INTERNAL_METHOD_PARAMS_TYPE_V1) - .or(MethodMatcher.paramTypesEqual(EXECUTE_INTERNAL_METHOD_PARAMS_TYPE_V2))); + private static MethodMatcher getSendOneQueryMethodMatcher() { + return MethodMatcher.nameEquals(SEND_ONE_QUERY_METHOD_NAME) + .and(MethodMatcher.paramTypesEqual(EXECUTE_METHOD_PARAMS_TYPE)); } /** - * 获取QueryExecutorImpl sendQuery方法有参拦截声明器 + * Get the parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer(DatabaseHandler handler) { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer(DatabaseHandler handler) { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); } /** - * 获取QueryExecutorImpl sendQuery方法无参拦截声明器 + * Get the non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method * - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method */ - public static InterceptDeclarer getSendQueryInterceptDeclarer() { - return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor()); + public static InterceptDeclarer getSendOneQueryInterceptDeclarer() { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor()); } /** - * 获取QueryExecutorImpl类的ClassMatcher + * Get the ClassMatcher of the QueryExecutorImpl class * - * @return ClassMatcher 类匹配器 + * @return ClassMatcher Class matcher */ public static ClassMatcher getQueryExecutorImplClassMatcher() { return ClassMatcher.nameEquals(ENHANCE_CLASS_NAME); diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc4StatementDeclarer.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc2StatementDeclarer.java similarity index 89% rename from sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc4StatementDeclarer.java rename to sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc2StatementDeclarer.java index a07e5b4b3e..db29e58ad8 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc4StatementDeclarer.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/Jdbc2StatementDeclarer.java @@ -22,15 +22,15 @@ import com.huaweicloud.sermant.postgresqlv9.utils.PostgresqlEnhancementHelper; /** - * SQL执行器增强声明器 + * AbstractJdbc2Statement declarer * * @author zhp * @since 2024-02-04 **/ -public class Jdbc4StatementDeclarer extends AbstractPluginDeclarer { +public class Jdbc2StatementDeclarer extends AbstractPluginDeclarer { @Override public ClassMatcher getClassMatcher() { - return PostgresqlEnhancementHelper.getJdbc4StatementClassMatcher(); + return PostgresqlEnhancementHelper.getJdbc2StatementClassMatcher(); } @Override diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplDeclarer.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV2Declarer.java similarity index 86% rename from sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplDeclarer.java rename to sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV2Declarer.java index f23ef2e947..cc6e1839ed 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplDeclarer.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV2Declarer.java @@ -22,15 +22,15 @@ import com.huaweicloud.sermant.postgresqlv9.utils.PostgresqlEnhancementHelper; /** - * SQL执行器增强声明器 + * org.postgresql.core.v2.QueryExecutorImpl declarer * * @author zhp * @since 2024-02-04 **/ -public class QueryExecutorImplDeclarer extends AbstractPluginDeclarer { +public class QueryExecutorImplV2Declarer extends AbstractPluginDeclarer { @Override public ClassMatcher getClassMatcher() { - return PostgresqlEnhancementHelper.getQueryExecutorImplClassMatcher(); + return PostgresqlEnhancementHelper.getQueryExecutorImplV2ClassMatcher(); } @Override diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV3Declarer.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV3Declarer.java new file mode 100644 index 0000000000..b91534a230 --- /dev/null +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/declarers/QueryExecutorImplV3Declarer.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024-2024 Huawei Technologies Co., Ltd. All rights reserved. + * + * Licensed 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 com.huaweicloud.sermant.postgresqlv9.declarers; + +import com.huaweicloud.sermant.core.plugin.agent.declarer.AbstractPluginDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.declarer.InterceptDeclarer; +import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; +import com.huaweicloud.sermant.postgresqlv9.utils.PostgresqlEnhancementHelper; + +/** + * org.postgresql.core.v3.QueryExecutorImpl declarer + * + * @author zhp + * @since 2024-02-04 + **/ +public class QueryExecutorImplV3Declarer extends AbstractPluginDeclarer { + @Override + public ClassMatcher getClassMatcher() { + return PostgresqlEnhancementHelper.getQueryExecutorImplV3ClassMatcher(); + } + + @Override + public InterceptDeclarer[] getInterceptDeclarers(ClassLoader classLoader) { + return new InterceptDeclarer[]{PostgresqlEnhancementHelper.getSendOneQueryInterceptDeclarer()}; + } +} diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptor.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptor.java similarity index 69% rename from sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptor.java rename to sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptor.java index 584e9716c8..241bd481bd 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptor.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptor.java @@ -24,39 +24,45 @@ import org.postgresql.jdbc3g.AbstractJdbc3gStatement; /** - * 执行SQL操作的拦截器 + * Interceptor for AbstractJdbc2Statement execute and executeBatch method * * @author zhp * @since 2024-02-04 **/ -public class Jdbc4StatementInterceptor extends AbstractDatabaseInterceptor { +public class Jdbc2StatementInterceptor extends AbstractDatabaseInterceptor { /** - * 无参构造方法 + * Non-parametric construction method */ - public Jdbc4StatementInterceptor() { + public Jdbc2StatementInterceptor() { } /** - * 有参构造方法 + * Parameterized construction method * - * @param handler 写操作处理器 + * @param handler Write operation handler */ - public Jdbc4StatementInterceptor(DatabaseHandler handler) { + public Jdbc2StatementInterceptor(DatabaseHandler handler) { this.handler = handler; } @Override public ExecuteContext doBefore(ExecuteContext context) { + if (!(context.getObject() instanceof AbstractJdbc3gStatement)) { + return context; + } AbstractJdbc3gStatement statement = (AbstractJdbc3gStatement) context.getObject(); - // 存放链接信息,保证QueryExecutorImplInterceptor可以获取到数据库信息 + // Store link information to ensure that QueryExecutorImplInterceptor can retrieve database information ThreadConnectionUtil.setConnection(statement.getPGConnection()); return context; } @Override protected void createAndCacheDatabaseInfo(ExecuteContext context) { - // 此拦截点主要是存放链接信息到线程变量中,不需要缓存数据库基础信息,因此方法为空实现 + /* + * This interception point is mainly used to store link information into thread variables, without the need to + * cache basic database information, so the method is implemented as empty + */ } @Override diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/QueryExecutorImplInterceptor.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/QueryExecutorImplInterceptor.java index c64ed263c7..b9e607c9fe 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/QueryExecutorImplInterceptor.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/interceptors/QueryExecutorImplInterceptor.java @@ -27,6 +27,7 @@ import com.huaweicloud.sermant.postgresqlv9.utils.ThreadConnectionUtil; import org.postgresql.Driver; +import org.postgresql.core.ParameterList; import org.postgresql.core.Query; import java.sql.Connection; @@ -37,7 +38,8 @@ import java.util.logging.Logger; /** - * 执行SQL操作的拦截器 + * Interceptor for org.postgresql.core.v2.QueryExecutorImpl sendQuery and org.postgresql.core.v3.QueryExecutorImpl + * sendOneQuery method * * @author zhp * @since 2024-02-04 @@ -46,15 +48,15 @@ public class QueryExecutorImplInterceptor extends AbstractDatabaseInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(); /** - * 无参构造方法 + * Non-parametric construction method */ public QueryExecutorImplInterceptor() { } /** - * 有参构造方法 + * Parameterized construction method * - * @param handler 写操作处理器 + * @param handler Write operation handler */ public QueryExecutorImplInterceptor(DatabaseHandler handler) { this.handler = handler; @@ -64,7 +66,7 @@ public QueryExecutorImplInterceptor(DatabaseHandler handler) { public ExecuteContext doBefore(ExecuteContext context) { DatabaseInfo databaseInfo = getDataBaseInfo(context); Query query = (Query) context.getArguments()[0]; - String sql = query.toString(); + String sql = query.toString((ParameterList) context.getArguments()[1]); String database = databaseInfo.getDatabaseName(); handleWriteOperationIfWriteDisabled(sql, database, DatabaseWriteProhibitionManager.getPostgreSqlProhibitionDatabases(), context); diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/PostgresqlEnhancementHelper.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/PostgresqlEnhancementHelper.java index 3da799070d..4420df2533 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/PostgresqlEnhancementHelper.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/PostgresqlEnhancementHelper.java @@ -20,11 +20,11 @@ import com.huaweicloud.sermant.core.plugin.agent.matcher.ClassMatcher; import com.huaweicloud.sermant.core.plugin.agent.matcher.MethodMatcher; import com.huaweicloud.sermant.database.handler.DatabaseHandler; -import com.huaweicloud.sermant.postgresqlv9.interceptors.Jdbc4StatementInterceptor; +import com.huaweicloud.sermant.postgresqlv9.interceptors.Jdbc2StatementInterceptor; import com.huaweicloud.sermant.postgresqlv9.interceptors.QueryExecutorImplInterceptor; /** - * postgresql拦截点辅助类 + * Helper class for postgresql9.x * * @author zhp * @since 2024-02-04 @@ -32,7 +32,11 @@ public class PostgresqlEnhancementHelper { private static final String SEND_QUERY_METHOD_NAME = "sendQuery"; - private static final String QUERY_EXECUTOR_CLASS_NAME = "org.postgresql.core.v3.QueryExecutorImpl"; + private static final String SEND_ONE_QUERY_METHOD_NAME = "sendOneQuery"; + + private static final String V3_QUERY_EXECUTOR_CLASS_NAME = "org.postgresql.core.v3.QueryExecutorImpl"; + + private static final String V2_QUERY_EXECUTOR_CLASS_NAME = "org.postgresql.core.v2.QueryExecutorImpl"; private static final String INT_CLASS_NAME = "int"; @@ -40,23 +44,39 @@ public class PostgresqlEnhancementHelper { private static final String PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.ParameterList"; + private static final String V3_QUERY_CLASS_NAME = "org.postgresql.core.v3.V3Query"; + + private static final String V3_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v3.V3ParameterList"; + + private static final String V2_QUERY_CLASS_NAME = "org.postgresql.core.v2.V2Query"; + + private static final String SIMPLE_PARAMETER_LIST_CLASS_NAME = "org.postgresql.core.v2.SimpleParameterList"; + + private static final String STRING_CLASS_NAME = "java.lang.String"; + private static final String ERROR_TRACKING_RESULT_HANDLER_CLASS_NAME = - "org.postgresql.core.v3.ErrorTrackingResultHandler"; + "org.postgresql.core.v3.QueryExecutorImpl$ErrorTrackingResultHandler"; - private static final String[] SEND_QUERY_METHOD_PARAMS_TYPE = { - QUERY_CLASS_NAME, - PARAMETER_LIST_CLASS_NAME, + private static final String[] SEND_ONE_QUERY_METHOD_PARAMS_TYPE = { + V3_QUERY_CLASS_NAME, + V3_PARAMETER_LIST_CLASS_NAME, INT_CLASS_NAME, INT_CLASS_NAME, INT_CLASS_NAME, ERROR_TRACKING_RESULT_HANDLER_CLASS_NAME }; + private static final String[] SEND_QUERY_METHOD_PARAMS_TYPE = { + V2_QUERY_CLASS_NAME, + SIMPLE_PARAMETER_LIST_CLASS_NAME, + STRING_CLASS_NAME + }; + private static final String EXECUTE_METHOD_NAME = "execute"; private static final String EXECUTE_BATCH_METHOD_NAME = "executeBatch"; - private static final String STATEMENT_CLASS_NAME = "org.postgresql.jdbc4.Jdbc4Statement"; + private static final String STATEMENT_CLASS_NAME = "org.postgresql.jdbc2.AbstractJdbc2Statement"; private static final String[] EXECUTE_METHOD_PARAMS_TYPE = { QUERY_CLASS_NAME, @@ -67,84 +87,117 @@ public class PostgresqlEnhancementHelper { private PostgresqlEnhancementHelper() { } + private static MethodMatcher getSendOneQueryMethodMatcher() { + return MethodMatcher.nameEquals(SEND_ONE_QUERY_METHOD_NAME) + .and(MethodMatcher.paramTypesEqual(SEND_ONE_QUERY_METHOD_PARAMS_TYPE)); + } + + /** + * Get the parameterized interceptor declarer for the org.postgresql.core.v3.QueryExecutorImpl sendOneQuery method + * + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the QueryExecutorImpl sendOneQuery method + */ + public static InterceptDeclarer getSendOneQueryInterceptDeclarer(DatabaseHandler handler) { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); + } + + /** + * Get the non-parameter interceptor declarer for org.postgresql.core.v3.QueryExecutorImpl sendOneQuery method + * + * @return InterceptDeclarer The non-parameter interceptor declarer for the QueryExecutorImpl sendOneQuery method + */ + public static InterceptDeclarer getSendOneQueryInterceptDeclarer() { + return InterceptDeclarer.build(getSendOneQueryMethodMatcher(), new QueryExecutorImplInterceptor()); + } + + /** + * Get ClassMatcher for the org.postgresql.core.v3.QueryExecutorImpl class + * + * @return ClassMatcher Class matcher + */ + public static ClassMatcher getQueryExecutorImplV3ClassMatcher() { + return ClassMatcher.nameEquals(V3_QUERY_EXECUTOR_CLASS_NAME); + } + private static MethodMatcher getSendQueryMethodMatcher() { return MethodMatcher.nameEquals(SEND_QUERY_METHOD_NAME) .and(MethodMatcher.paramTypesEqual(SEND_QUERY_METHOD_PARAMS_TYPE)); } /** - * 获取QueryExecutorImpl sendQuery方法有参拦截声明器 + * Get the parameterized interceptor declarer for the org.postgresql.core.v2.QueryExecutorImpl sendQuery method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the QueryExecutorImpl sendQuery method */ public static InterceptDeclarer getSendQueryInterceptDeclarer(DatabaseHandler handler) { return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor(handler)); } /** - * 获取QueryExecutorImpl sendQuery方法无参拦截声明器 + * Get the non-parameter interceptor declarer for org.postgresql.core.v2.QueryExecutorImpl sendQuery method * - * @return InterceptDeclarer QueryExecutorImpl sendQuery方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for QueryExecutorImpl sendQuery method */ public static InterceptDeclarer getSendQueryInterceptDeclarer() { return InterceptDeclarer.build(getSendQueryMethodMatcher(), new QueryExecutorImplInterceptor()); } /** - * 获取QueryExecutorImpl类的ClassMatcher + * Get ClassMatcher for the org.postgresql.core.v2.QueryExecutorImpl class * - * @return ClassMatcher 类匹配器 + * @return ClassMatcher Class matcher */ - public static ClassMatcher getQueryExecutorImplClassMatcher() { - return ClassMatcher.nameEquals(QUERY_EXECUTOR_CLASS_NAME); + public static ClassMatcher getQueryExecutorImplV2ClassMatcher() { + return ClassMatcher.nameEquals(V2_QUERY_EXECUTOR_CLASS_NAME); } /** - * 获取Jdbc4Statement类的ClassMatcher + * Get ClassMatcher for AbstractJdbc2Statement class * - * @return ClassMatcher 类匹配器 + * @return ClassMatcher Database custom handler */ - public static ClassMatcher getJdbc4StatementClassMatcher() { + public static ClassMatcher getJdbc2StatementClassMatcher() { return ClassMatcher.nameEquals(STATEMENT_CLASS_NAME); } /** - * 获取Jdbc4Statement execute方法无参拦截声明器 + * Get the non-parameter interceptor declarer for AbstractJdbc2Statement execute method * - * @return InterceptDeclarer Jdbc4Statement execute方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for AbstractJdbc2Statement execute method */ public static InterceptDeclarer getExecuteInterceptDeclarer() { - return InterceptDeclarer.build(getExecuteMethodMatcher(), new Jdbc4StatementInterceptor()); + return InterceptDeclarer.build(getExecuteMethodMatcher(), new Jdbc2StatementInterceptor()); } /** - * 获取Jdbc4Statement execute方法有参拦截声明器 + * Get the parameterized interceptor declarer for the AbstractJdbc2Statement execute method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer Jdbc4Statement execute方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for the AbstractJdbc2Statement execute method */ public static InterceptDeclarer getExecuteInterceptDeclarer(DatabaseHandler handler) { - return InterceptDeclarer.build(getExecuteMethodMatcher(), new Jdbc4StatementInterceptor(handler)); + return InterceptDeclarer.build(getExecuteMethodMatcher(), new Jdbc2StatementInterceptor(handler)); } /** - * 获取Jdbc4Statement executeBatch方法无参拦截声明器 + * Get the non-parameter interceptor declarer for AbstractJdbc2Statement executeBatch method * - * @return InterceptDeclarer Jdbc4Statement executeBatch方法无参拦截声明器 + * @return InterceptDeclarer The non-parameter interceptor declarer for AbstractJdbc2Statement executeBatch method */ public static InterceptDeclarer getExecuteBatchInterceptDeclarer() { - return InterceptDeclarer.build(getExecuteBatchMethodMatcher(), new Jdbc4StatementInterceptor()); + return InterceptDeclarer.build(getExecuteBatchMethodMatcher(), new Jdbc2StatementInterceptor()); } /** - * 获取Jdbc4Statement executeBatch方法有参拦截声明器 + * Get the parameterized interceptor declarer for AbstractJdbc2Statement executeBatch method * - * @param handler 数据库自定义处理器 - * @return InterceptDeclarer Jdbc4Statement executeBatch方法有参拦截声明器 + * @param handler Database custom handler + * @return InterceptDeclarer The parameterized interceptor declarer for AbstractJdbc2Statement executeBatch method */ public static InterceptDeclarer getExecuteBatchInterceptDeclarer(DatabaseHandler handler) { - return InterceptDeclarer.build(getExecuteBatchMethodMatcher(), new Jdbc4StatementInterceptor(handler)); + return InterceptDeclarer.build(getExecuteBatchMethodMatcher(), new Jdbc2StatementInterceptor(handler)); } private static MethodMatcher getExecuteMethodMatcher() { diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/ThreadConnectionUtil.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/ThreadConnectionUtil.java index ac92a2735d..7b6f06d7af 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/ThreadConnectionUtil.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/java/com/huaweicloud/sermant/postgresqlv9/utils/ThreadConnectionUtil.java @@ -19,43 +19,43 @@ import java.sql.Connection; /** - * 线程工具类,用于线程数据传递 + * Thread tool class, used for thread data transfer * * @author zhp * @since 2024-02-06 */ public class ThreadConnectionUtil { /** - * 线程变量存储,主要存储链接信息 + * Thread variable storage, mainly storing link information */ private static final ThreadLocal CONNECTION_THREAD_LOCAL = new InheritableThreadLocal<>(); /** - * 构造函数 + * Constructor */ private ThreadConnectionUtil() { } /** - * 设置链接信息 + * Set connection information * - * @param connection 连接信息 + * @param connection connection information */ public static void setConnection(Connection connection) { CONNECTION_THREAD_LOCAL.set(connection); } /** - * 获取链接信息 + * Get connection information * - * @return 请求开始时间 + * @return connection information */ public static Connection getConnection() { return CONNECTION_THREAD_LOCAL.get(); } /** - * 移除链接信息 + * Remove connection information */ public static void removeConnection() { CONNECTION_THREAD_LOCAL.remove(); diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer index f8055a36f1..0a9c7925c3 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/main/resources/META-INF/services/com.huaweicloud.sermant.core.plugin.agent.declarer.PluginDeclarer @@ -13,5 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -com.huaweicloud.sermant.postgresqlv9.declarers.QueryExecutorImplDeclarer -com.huaweicloud.sermant.postgresqlv9.declarers.Jdbc4StatementDeclarer \ No newline at end of file +com.huaweicloud.sermant.postgresqlv9.declarers.QueryExecutorImplV3Declarer +com.huaweicloud.sermant.postgresqlv9.declarers.QueryExecutorImplV2Declarer +com.huaweicloud.sermant.postgresqlv9.declarers.Jdbc2StatementDeclarer \ No newline at end of file diff --git a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptorTest.java b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptorTest.java similarity index 93% rename from sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptorTest.java rename to sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptorTest.java index c4656ae168..9bca6bcec5 100644 --- a/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc4StatementInterceptorTest.java +++ b/sermant-plugins/sermant-database-write-prohibition/postgresql-9.4.x-plugin/src/test/java/com/huaweicloud/sermant/postgresqlv9/interceptors/Jdbc2StatementInterceptorTest.java @@ -41,7 +41,7 @@ * @author zhp * @since 2024-02-04 **/ -public class Jdbc4StatementInterceptorTest { +public class Jdbc2StatementInterceptorTest { private static final DatabaseWriteProhibitionConfig GLOBAL_CONFIG = new DatabaseWriteProhibitionConfig(); private static Method methodMock; @@ -50,7 +50,7 @@ public class Jdbc4StatementInterceptorTest { private static BaseConnection connection; - private final Jdbc4StatementInterceptor jdbc4StatementInterceptor = new Jdbc4StatementInterceptor(); + private final Jdbc2StatementInterceptor jdbc2StatementInterceptor = new Jdbc2StatementInterceptor(); @BeforeClass public static void setUp() throws SQLException { @@ -67,7 +67,7 @@ public static void setUp() throws SQLException { public void testDoBefore() throws Exception { ExecuteContext context = ExecuteContext.forMemberMethod(abstractJdbc3gStatement, methodMock, null, null, null); - jdbc4StatementInterceptor.before(context); + jdbc2StatementInterceptor.before(context); Assert.assertNotNull(ThreadConnectionUtil.getConnection()); }