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;
}
}