From c4cfaab621472478171bfa731996e032812ef5b4 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期二, 28 十二月 2021 11:24:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java | 23 +++++
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java | 68 +++++++++++++++++
ruoyi-common/src/main/java/com/ruoyi/common/enums/SensitiveStrategy.java | 32 ++++++++
ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java | 43 ++++++++++
ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java | 35 ++++++++
5 files changed, 201 insertions(+), 0 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java
new file mode 100644
index 0000000..ff17b09
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java
@@ -0,0 +1,23 @@
+package com.ruoyi.common.annotation;
+
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.ruoyi.common.enums.SensitiveStrategy;
+import com.ruoyi.common.jackson.SensitiveJsonSerializer;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鏁版嵁鑴辨晱娉ㄨВ
+ * @author zhujie
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@JacksonAnnotationsInside
+@JsonSerialize(using = SensitiveJsonSerializer.class)
+public @interface Sensitive {
+ SensitiveStrategy strategy();
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/SensitiveStrategy.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/SensitiveStrategy.java
new file mode 100644
index 0000000..5f9bf72
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/SensitiveStrategy.java
@@ -0,0 +1,32 @@
+package com.ruoyi.common.enums;
+
+import cn.hutool.core.util.DesensitizedUtil;
+import java.util.function.Function;
+
+/**
+ * 鑴辨晱绛栫暐
+ * @author Yjoioooo
+ */
+public enum SensitiveStrategy {
+
+ /** 韬唤璇佽劚鏁� */
+ ID_CARD(s -> DesensitizedUtil.idCardNum(s, 3, 4)),
+
+ /** 鎵嬫満鍙疯劚鏁� */
+ PHONE(DesensitizedUtil::mobilePhone),
+
+ /** 鍦板潃鑴辨晱 */
+ ADDRESS(s -> DesensitizedUtil.address(s, 8));
+
+ //鍙嚜琛屾坊鍔犲叾浠栬劚鏁忕瓥鐣�
+
+ private final Function<String, String> desensitizer;
+
+ SensitiveStrategy(Function<String, String> desensitizer) {
+ this.desensitizer = desensitizer;
+ }
+
+ public Function<String, String> desensitizer() {
+ return desensitizer;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java
new file mode 100644
index 0000000..2b4fef4
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java
@@ -0,0 +1,43 @@
+package com.ruoyi.common.jackson;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.BeanProperty;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.ContextualSerializer;
+import com.ruoyi.common.annotation.Sensitive;
+import com.ruoyi.common.enums.SensitiveStrategy;
+import com.ruoyi.common.utils.SecurityUtils;
+
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * 鏁版嵁鑴辨晱json搴忓垪鍖栧伐鍏�
+ * @author Yjoioooo
+ */
+public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {
+
+ private SensitiveStrategy strategy;
+
+ @Override
+ public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ if (SecurityUtils.isAdmin(SecurityUtils.getLoginUser().getUserId()) || SecurityUtils.getLoginUser().getMenuPermissions().contains("Sensitive")){
+ gen.writeString(value);
+ } else {
+ gen.writeString(strategy.desensitizer().apply(value));
+ }
+
+ }
+
+ @Override
+ public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
+ Sensitive annotation = property.getAnnotation(Sensitive.class);
+ if (Objects.nonNull(annotation)&&Objects.equals(String.class, property.getType().getRawClass())) {
+ this.strategy = annotation.strategy();
+ return this;
+ }
+ return prov.findValueSerializer(property.getType(), property);
+ }
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java
new file mode 100644
index 0000000..30708cd
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.demo.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.excel.ExcelResult;
+import com.ruoyi.common.utils.ValidatorUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.demo.domain.TestDemo;
+import com.ruoyi.demo.domain.TestSensitive;
+import com.ruoyi.demo.domain.bo.TestDemoBo;
+import com.ruoyi.demo.domain.bo.TestDemoImportVo;
+import com.ruoyi.demo.domain.vo.TestDemoVo;
+import com.ruoyi.demo.service.ITestDemoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 娴嬭瘯鍗曡〃Controller
+ *
+ * @author Lion Li
+ * @date 2021-07-26
+ */
+@Validated
+@Api(value = "娴嬭瘯鏁版嵁鑴辨晱鎺у埗鍣�", tags = {"娴嬭瘯鏁版嵁鑴辨晱绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/demo/sensitive")
+public class TestSensitiveController extends BaseController {
+
+ //榛樿涓篴dmin鐢ㄦ埛鍙婃嫢鏈塖ensitive鏉冮檺瀛楃鐢ㄦ埛涓嶅仛鑴辨晱
+ //1.閰嶇疆鑿滃崟鍔犲叆鏉冮檺瀛楃涓篠ensitive鐨勬寜閽�
+ //2.閰嶇疆闇�瑕佸厤闄ゆ暟鎹劚鏁忕殑瑙掕壊鍔犲叆Sensitive鏉冮檺
+ //3.瀹炰綋绫讳笂鍔犱笂鏁版嵁鑴辨晱娉ㄨВ
+ /**
+ * 娴嬭瘯鏁版嵁鑴辨晱
+ */
+ @ApiOperation("鏌ヨ娴嬭瘯鍗曡〃鍒楄〃")
+ @GetMapping()
+ public AjaxResult<TestSensitive> get() {
+ TestSensitive testSensitive = new TestSensitive()
+ .setIdCard("3333199910101212")
+ .setPhone("18888888888")
+ .setAddress("鍖椾含甯傛湞闃冲尯鏌愭煇鍥涘悎闄�1203瀹�");
+ return AjaxResult.success(testSensitive);
+ }
+
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java
new file mode 100644
index 0000000..1fbf6b3
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java
@@ -0,0 +1,35 @@
+package com.ruoyi.demo.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.annotation.Sensitive;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.enums.SensitiveStrategy;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 娴嬭瘯鍗曡〃瀵硅薄 test_demo
+ *
+ * @author Lion Li
+ * @date 2021-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class TestSensitive extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /** 韬唤璇� */
+ @Sensitive(strategy = SensitiveStrategy.ID_CARD)
+ private String idCard;
+
+ /** 鐢佃瘽 */
+ @Sensitive(strategy = SensitiveStrategy.PHONE)
+ private String phone;
+
+ /** 鍦板潃 */
+ @Sensitive(strategy = SensitiveStrategy.ADDRESS)
+ private String address;
+}
--
Gitblit v1.9.3