This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 84a95460d7c Optimize data mask result decorator logic and code style
(#23151)
84a95460d7c is described below
commit 84a95460d7cffdb497d11f85667371bde4acf792
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Dec 29 13:39:23 2022 +0800
Optimize data mask result decorator logic and code style (#23151)
* Optimize data mask result decorator logic and code style
* modify pg default mask config
---
.../mask/merge/MaskResultDecoratorEngine.java | 4 ++--
.../mask/merge/dql/MaskAlgorithmMetaData.java | 14 +-------------
.../yaml/swapper/YamlMaskRuleConfigurationSwapper.java | 5 +++--
.../rule/YamlMaskTableRuleConfigurationSwapper.java | 4 ++--
.../mask/merge/dql/MaskAlgorithmMetaDataTest.java | 14 +++++++++-----
proxy/bootstrap/src/main/resources/conf/config-mask.yaml | 10 ++++++----
6 files changed, 23 insertions(+), 28 deletions(-)
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
index 753c10a4377..acc3bc1e414 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
@@ -35,8 +35,8 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
public final class MaskResultDecoratorEngine implements
ResultDecoratorEngine<MaskRule> {
@Override
- public ResultDecorator<?> newInstance(final ShardingSphereDatabase
database,
- final MaskRule maskRule, final
ConfigurationProperties props, final SQLStatementContext<?>
sqlStatementContext) {
+ public ResultDecorator<?> newInstance(final ShardingSphereDatabase
database, final MaskRule maskRule,
+ final ConfigurationProperties props,
final SQLStatementContext<?> sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
MaskAlgorithmMetaData algorithmMetaData = new
MaskAlgorithmMetaData(database, maskRule, (SelectStatementContext)
sqlStatementContext);
return new MaskDQLResultDecorator(algorithmMetaData);
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
index 4b1ec05b752..3bec741543a 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
@@ -45,17 +45,6 @@ public final class MaskAlgorithmMetaData {
private final SelectStatementContext selectStatementContext;
- /**
- * Find mask algorithm.
- *
- * @param tableName table name
- * @param columnName column name
- * @return maskAlgorithm
- */
- public Optional<MaskAlgorithm> findMaskAlgorithm(final String tableName,
final String columnName) {
- return maskRule.findMaskAlgorithm(tableName, columnName);
- }
-
/**
* Find mask algorithm.
*
@@ -71,8 +60,7 @@ public final class MaskAlgorithmMetaData {
String schemaName = tablesContext.getSchemaName().orElseGet(() ->
DatabaseTypeEngine.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
database.getName()));
Map<String, String> expressionTableNames =
tablesContext.findTableNamesByColumnProjection(
Collections.singletonList(columnProjection.get()),
database.getSchema(schemaName));
- Optional<String> tableName = findTableName(columnProjection.get(),
expressionTableNames);
- return maskRule.findMaskAlgorithm(tableName.get(),
columnProjection.get().getName());
+ return findTableName(columnProjection.get(),
expressionTableNames).flatMap(optional -> maskRule.findMaskAlgorithm(optional,
columnProjection.get().getName()));
}
private Optional<ColumnProjection> findColumnProjection(final int
columnIndex) {
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
index d260927a885..4627808eca4 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
@@ -32,6 +32,7 @@ import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Map.Entry;
/**
* YAML mask rule configuration swapper.
@@ -57,7 +58,7 @@ public final class YamlMaskRuleConfigurationSwapper
implements YamlRuleConfigura
private Collection<MaskTableRuleConfiguration> swapTables(final
YamlMaskRuleConfiguration yamlConfig) {
Collection<MaskTableRuleConfiguration> result = new LinkedList<>();
- for (Map.Entry<String, YamlMaskTableRuleConfiguration> entry :
yamlConfig.getTables().entrySet()) {
+ for (Entry<String, YamlMaskTableRuleConfiguration> entry :
yamlConfig.getTables().entrySet()) {
YamlMaskTableRuleConfiguration yamlMaskTableRuleConfig =
entry.getValue();
yamlMaskTableRuleConfig.setName(entry.getKey());
result.add(tableSwapper.swapToObject(yamlMaskTableRuleConfig));
@@ -67,7 +68,7 @@ public final class YamlMaskRuleConfigurationSwapper
implements YamlRuleConfigura
private Map<String, AlgorithmConfiguration> swapMaskAlgorithm(final
YamlMaskRuleConfiguration yamlConfig) {
Map<String, AlgorithmConfiguration> result = new
LinkedHashMap<>(yamlConfig.getMaskAlgorithms().size(), 1);
- for (Map.Entry<String, YamlAlgorithmConfiguration> entry :
yamlConfig.getMaskAlgorithms().entrySet()) {
+ for (Entry<String, YamlAlgorithmConfiguration> entry :
yamlConfig.getMaskAlgorithms().entrySet()) {
result.put(entry.getKey(),
algorithmSwapper.swapToObject(entry.getValue()));
}
return result;
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
index d6502bd9549..c4a0b762e4d 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
@@ -25,7 +25,7 @@ import
org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfigur
import java.util.Collection;
import java.util.LinkedList;
-import java.util.Map;
+import java.util.Map.Entry;
/**
* YAML mask table rule configuration swapper.
@@ -47,7 +47,7 @@ public final class YamlMaskTableRuleConfigurationSwapper
implements YamlConfigur
@Override
public MaskTableRuleConfiguration swapToObject(final
YamlMaskTableRuleConfiguration yamlConfig) {
Collection<MaskColumnRuleConfiguration> columns = new LinkedList<>();
- for (Map.Entry<String, YamlMaskColumnRuleConfiguration> entry :
yamlConfig.getColumns().entrySet()) {
+ for (Entry<String, YamlMaskColumnRuleConfiguration> entry :
yamlConfig.getColumns().entrySet()) {
YamlMaskColumnRuleConfiguration yamlMaskColumnRuleConfig =
entry.getValue();
yamlMaskColumnRuleConfig.setLogicColumn(entry.getKey());
columns.add(columnSwapper.swapToObject(yamlMaskColumnRuleConfig));
diff --git
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
index 98396ca26b1..e78587eea9c 100644
---
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
+++
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.mask.merge.dql;
+import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
@@ -32,6 +33,7 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import java.util.Collections;
import java.util.Optional;
import java.util.Properties;
@@ -52,7 +54,7 @@ public final class MaskAlgorithmMetaDataTest {
@Mock
private MaskRule maskRule;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private SelectStatementContext selectStatementContext;
private MaskAlgorithm<?, ?> maskAlgorithm;
@@ -60,15 +62,17 @@ public final class MaskAlgorithmMetaDataTest {
@Before
public void setUp() {
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
- maskAlgorithm = (MaskAlgorithm<?, ?>)
MaskAlgorithmFactory.newInstance(new AlgorithmConfiguration("MD5", new
Properties()));
+ maskAlgorithm = MaskAlgorithmFactory.newInstance(new
AlgorithmConfiguration("MD5", new Properties()));
}
@SuppressWarnings("rawtypes")
@Test
- public void assertFindMaskAlgorithm() {
- when(maskRule.findMaskAlgorithm("t_order",
"id")).thenReturn(Optional.of(maskAlgorithm));
+ public void assertFindMaskAlgorithmByColumnIndex() {
+ when(maskRule.findMaskAlgorithm("t_order",
"order_id")).thenReturn(Optional.of(maskAlgorithm));
+
when(selectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Collections.singletonList(new
ColumnProjection(null, "order_id", null)));
+
when(selectStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("t_order"));
MaskAlgorithmMetaData maskAlgorithmMetaData = new
MaskAlgorithmMetaData(database, maskRule, selectStatementContext);
- Optional<MaskAlgorithm> actual =
maskAlgorithmMetaData.findMaskAlgorithm("t_order", "id");
+ Optional<MaskAlgorithm> actual =
maskAlgorithmMetaData.findMaskAlgorithmByColumnIndex(1);
assertTrue(actual.isPresent());
assertThat(actual.get().getType(), is("MD5"));
}
diff --git a/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
b/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
index d8d36b35622..44ee9ebda64 100644
--- a/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
+++ b/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
@@ -52,22 +52,24 @@
# password:
# maskAlgorithm: md5_mask
# email:
-# maskAlgorithm: mask_before_special_char_mask
+# maskAlgorithm: mask_before_special_chars_mask
# telephone:
# maskAlgorithm: keep_first_n_last_m_mask
#
# maskAlgorithms:
# md5_mask:
# type: MD5
-# mask_before_special_char_mask:
-# type: MASK_BEFORE_SPECIAL_CHAR
+# mask_before_special_chars_mask:
+# type: MASK_BEFORE_SPECIAL_CHARS
# props:
-# special-characters: @
+# special-chars: '@'
+# replace-char: '*'
# keep_first_n_last_m_mask:
# type: KEEP_FIRST_N_LAST_M
# props:
# first-n: 3
# last-m: 4
+# replace-char: '*'
######################################################################################################
#