You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/31 08:01:36 UTC

[shardingsphere] branch master updated: Revise pr 23171 (#23222)

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

sunnianjun 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 0353f875d1b Revise pr 23171 (#23222)
0353f875d1b is described below

commit 0353f875d1bb5466f30484d20ab1d5e935ccf778
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Sat Dec 31 16:01:29 2022 +0800

    Revise pr 23171 (#23222)
    
    * Revise pr 23171
    
    * Revise pr 23171
---
 docs/document/content/dev-manual/mask.en.md        |  2 +-
 .../common-config/builtin-algorithm/mask.cn.md     |  6 ++---
 .../common-config/builtin-algorithm/mask.en.md     | 12 ++++-----
 .../replace/TelephoneRandomReplaceAlgorithm.java   | 29 ++++++++++++----------
 .../TelephoneRandomReplaceAlgorithmTest.java       |  6 ++---
 5 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/docs/document/content/dev-manual/mask.en.md b/docs/document/content/dev-manual/mask.en.md
index 16b09fe9fc5..2d06d7a4003 100644
--- a/docs/document/content/dev-manual/mask.en.md
+++ b/docs/document/content/dev-manual/mask.en.md
@@ -26,4 +26,4 @@ Data masking algorithm definition
 | MASK_FROM_X_TO_Y              | Mask from x to y data masking algorithm          | [`org.apache.shardingsphere.mask.algorithm.cover.MASK_FROM_X_TO_Y`](https://github.com/apache/shardingsphere/blob/master/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/cover/MaskFromXToYMaskAlgorithm.java)                 |
 | MASK_BEFORE_SPECIAL_CHARS     | Mask before special chars data masking algorithm | [`org.apache.shardingsphere.mask.algorithm.cover.MASK_BEFORE_SPECIAL_CHARS`](https://github.com/apache/shardingsphere/blob/master/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/cover/MaskBeforeSpecialCharsAlgorithm.java)                 |
 | MASK_AFTER_SPECIAL_CHARS      | Mask after special chars data masking algorithm  | [`org.apache.shardingsphere.mask.algorithm.cover.MASK_AFTER_SPECIAL_CHARS`](https://github.com/apache/shardingsphere/blob/master/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/cover/MaskAfterSpecialCharsAlgorithm.java)                 |
-| TELEPHONE_RANDOM_REPLACE      | Random replacement of mobile phone number data masking algorithm  | [`org.apache.shardingsphere.mask.algorithm.replace.TELEPHONE_RANDOM_REPLACE`](https://github.com/apache/shardingsphere/blob/master/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java)                 |
+| TELEPHONE_RANDOM_REPLACE      | Telephone random replace data masking algorithm  | [`org.apache.shardingsphere.mask.algorithm.replace.TELEPHONE_RANDOM_REPLACE`](https://github.com/apache/shardingsphere/blob/master/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java)                 |
diff --git a/docs/document/content/user-manual/common-config/builtin-algorithm/mask.cn.md b/docs/document/content/user-manual/common-config/builtin-algorithm/mask.cn.md
index 67d407e708d..b3b9b74d52d 100644
--- a/docs/document/content/user-manual/common-config/builtin-algorithm/mask.cn.md
+++ b/docs/document/content/user-manual/common-config/builtin-algorithm/mask.cn.md
@@ -101,9 +101,9 @@ weight = 9
 
 可配置属性:
 
-| *名称*         | *数据类型* | *说明*         |
-|----------------|----------|----------------|
-| network-number | String   | ⽹号(以,分割输入)|
+| *名称*            | *数据类型* | *说明*        |
+|-----------------|----------|-------------|
+| network-numbers | String   | ⽹号(以英文逗号分隔) |
 
 ## 操作步骤
 1. 在脱敏规则中配置脱敏算法;
diff --git a/docs/document/content/user-manual/common-config/builtin-algorithm/mask.en.md b/docs/document/content/user-manual/common-config/builtin-algorithm/mask.en.md
index daeec814745..f49b530c3d7 100644
--- a/docs/document/content/user-manual/common-config/builtin-algorithm/mask.en.md
+++ b/docs/document/content/user-manual/common-config/builtin-algorithm/mask.en.md
@@ -17,9 +17,9 @@ Type: MD5
 
 Attributes:
 
-| *Name* | *DataType* | *Description*        |
-|--------| ---------- |----------------------|
-| salt   | String     | Salt value(optional) |
+| *Name* | *DataType* | *Description*         |
+|--------| ---------- |-----------------------|
+| salt   | String     | Salt value (optional) |
 
 ### Mask Data Masking Algorithm
 
@@ -101,9 +101,9 @@ Type: TELEPHONE_RANDOM_REPLACE
 
 Attributes:
 
-| *Name* | *DataType* | *Description*                    |
-|----------------|--------|----------------------------------------|
-| network-number | String | Network number (separate input with ,) |
+| *Name*          | *DataType* | *Description*                         |
+|-----------------|--------|---------------------------------------|
+| network-numbers | String | Network numbers (separate with comma) |
 
 ## Operating Procedure
 1. Configure maskAlgorithms in a mask rule.
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java
index b1864ad2e66..167890f6959 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithm.java
@@ -26,7 +26,6 @@ import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
 
 import java.util.Collection;
 import java.util.Comparator;
-import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 import java.util.stream.Collectors;
@@ -36,11 +35,11 @@ import java.util.stream.Collectors;
  */
 public final class TelephoneRandomReplaceAlgorithm implements MaskAlgorithm<Object, String> {
     
-    private static final String NETWORK_NUMBER = "network-number";
+    private static final String NETWORK_NUMBERS = "network-numbers";
     
     private Collection<String> networkNumbers;
     
-    private List<Integer> networkNumberLength;
+    private Collection<Integer> reverseOrderedNetworkNumberLengths;
     
     @Getter
     private Properties props;
@@ -48,24 +47,28 @@ public final class TelephoneRandomReplaceAlgorithm implements MaskAlgorithm<Obje
     @Override
     public void init(final Properties props) {
         this.props = props;
-        createNetworkNumbers(props);
+        this.networkNumbers = createNetworkNumbers(props);
+        this.reverseOrderedNetworkNumberLengths = createReverseOrderedNetworkNumberLengths(networkNumbers);
     }
     
-    private void createNetworkNumbers(final Properties props) {
-        MaskAlgorithmUtil.checkAtLeastOneCharConfig(props, NETWORK_NUMBER, getType());
-        networkNumbers = Splitter.on(",").trimResults().splitToStream(props.getProperty(NETWORK_NUMBER)).map(networkNumber -> isNumeric(networkNumber)).collect(Collectors.toSet());
-        networkNumberLength = networkNumbers.stream().map(networkNumber -> String.valueOf(networkNumber).length()).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
+    private Collection<String> createNetworkNumbers(final Properties props) {
+        MaskAlgorithmUtil.checkAtLeastOneCharConfig(props, NETWORK_NUMBERS, getType());
+        return Splitter.on(",").trimResults().splitToList(props.getProperty(NETWORK_NUMBERS)).stream().map(this::getNetworkNumber).collect(Collectors.toSet());
     }
     
-    private String isNumeric(final String networkNumber) {
+    private String getNetworkNumber(final String networkNumber) {
         try {
             Integer.parseInt(networkNumber);
             return networkNumber;
-        } catch (NumberFormatException e) {
-            throw new MaskAlgorithmInitializationException(getType(), "network-number can only be numbers and ,");
+        } catch (final NumberFormatException ex) {
+            throw new MaskAlgorithmInitializationException(getType(), String.format("network-number %s can only be integer number.", networkNumber));
         }
     }
     
+    private Collection<Integer> createReverseOrderedNetworkNumberLengths(final Collection<String> networkNumbers) {
+        return networkNumbers.stream().map(String::length).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
+    }
+    
     @Override
     public String mask(final Object plainValue) {
         String result = null == plainValue ? null : String.valueOf(plainValue);
@@ -74,9 +77,9 @@ public final class TelephoneRandomReplaceAlgorithm implements MaskAlgorithm<Obje
         }
         Random random = new Random();
         char[] chars = result.toCharArray();
-        for (Integer each : networkNumberLength) {
+        for (Integer each : reverseOrderedNetworkNumberLengths) {
             if (networkNumbers.contains(result.substring(0, each))) {
-                for (int i = each; i != -1 && i < chars.length; i++) {
+                for (int i = each; i < chars.length; i++) {
                     chars[i] = Character.forDigit(random.nextInt(10), 10);
                 }
                 break;
diff --git a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithmTest.java b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithmTest.java
index fbf99994066..8a566312587 100644
--- a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithmTest.java
+++ b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/algorithm/replace/TelephoneRandomReplaceAlgorithmTest.java
@@ -39,7 +39,7 @@ public final class TelephoneRandomReplaceAlgorithmTest {
     }
     
     @Test(expected = MaskAlgorithmInitializationException.class)
-    public void assertKeyNotNumber() {
+    public void assertInitWhenConfigNotNumberProps() {
         maskAlgorithm.init(createProperties("130, x130, 155,1702"));
     }
     
@@ -55,9 +55,9 @@ public final class TelephoneRandomReplaceAlgorithmTest {
         assertThat(maskAlgorithm.mask("13012345678"), not("13012345678"));
     }
     
-    private Properties createProperties(final String networkNumber) {
+    private Properties createProperties(final String networkNumbers) {
         Properties result = new Properties();
-        result.setProperty("network-number", networkNumber);
+        result.setProperty("network-numbers", networkNumbers);
         return result;
     }
 }