diff --git a/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/annotation/JsonMask.java b/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/annotation/JsonMask.java index 24769506..b13c7bf9 100644 --- a/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/annotation/JsonMask.java +++ b/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/annotation/JsonMask.java @@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import top.charles7c.continew.starter.core.constant.StringConstants; import top.charles7c.continew.starter.security.mask.core.JsonMaskSerializer; import top.charles7c.continew.starter.security.mask.enums.MaskType; +import top.charles7c.continew.starter.security.mask.strategy.IMaskStrategy; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -44,6 +45,14 @@ public @interface JsonMask { */ MaskType value() default MaskType.CUSTOM; + /** + * 脱敏策略 + *
+ * 优先级高于脱敏类型 + *
+ */ + Class extends IMaskStrategy> strategy() default IMaskStrategy.class; + /** * 左侧保留位数 *
diff --git a/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/core/JsonMaskSerializer.java b/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/core/JsonMaskSerializer.java
index 94befdc5..d5b9da33 100644
--- a/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/core/JsonMaskSerializer.java
+++ b/continew-starter-security/continew-starter-security-mask/src/main/java/top/charles7c/continew/starter/security/mask/core/JsonMaskSerializer.java
@@ -18,6 +18,7 @@ package top.charles7c.continew.starter.security.mask.core;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
@@ -26,7 +27,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import top.charles7c.continew.starter.core.constant.StringConstants;
import top.charles7c.continew.starter.security.mask.annotation.JsonMask;
-import top.charles7c.continew.starter.security.mask.enums.MaskType;
+import top.charles7c.continew.starter.security.mask.strategy.IMaskStrategy;
import java.io.IOException;
import java.util.Objects;
@@ -56,8 +57,12 @@ public class JsonMaskSerializer extends JsonSerializer
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * 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 top.charles7c.continew.starter.security.mask.strategy;
+
+/**
+ * 脱敏策略
+ *
+ * @author Charles7c
+ * @since 1.4.0
+ */
+public interface IMaskStrategy {
+
+ /**
+ * 数据脱敏
+ *
+ * @param str 原始字符串
+ * @param character 脱敏符号
+ * @param left 左侧保留位数
+ * @param right 右侧保留位数
+ * @return 脱敏后的数据
+ */
+ String mask(String str, char character, int left, int right);
+}