From ffc385f566caf13755ff36f50beddd0221516543 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期四, 17 九月 2026 15:48:23 +0800
Subject: [PATCH] feat&bug:隐私号放行
---
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/AppUserDetailsVo.java | 2 ++
cloud-server-account/src/main/java/com/dsh/privacy/UnmaskedSensitiveData.java | 15 +++++++++++++++
cloud-server-account/src/main/java/com/dsh/privacy/SensitiveDataMaskingAdvice.java | 4 +++-
3 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/AppUserDetailsVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/AppUserDetailsVo.java
index 25047d6..50b4f95 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/AppUserDetailsVo.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/AppUserDetailsVo.java
@@ -1,6 +1,7 @@
package com.dsh.account.model.vo.userBenefitDetail;
+import com.dsh.privacy.UnmaskedSensitiveData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,6 +17,7 @@
private String userName;
@ApiModelProperty(value = "用户手机号")
+ @UnmaskedSensitiveData
private String userPhone;
@ApiModelProperty(value = "用户性别")
diff --git a/cloud-server-account/src/main/java/com/dsh/privacy/SensitiveDataMaskingAdvice.java b/cloud-server-account/src/main/java/com/dsh/privacy/SensitiveDataMaskingAdvice.java
index 1045921..0565e3c 100644
--- a/cloud-server-account/src/main/java/com/dsh/privacy/SensitiveDataMaskingAdvice.java
+++ b/cloud-server-account/src/main/java/com/dsh/privacy/SensitiveDataMaskingAdvice.java
@@ -69,7 +69,9 @@
field.setAccessible(true);
Object fieldValue = field.get(value);
int sensitive = sensitiveType(field.getName());
- if (fieldValue instanceof String && sensitive != 0) field.set(value, maskText((String) fieldValue, sensitive));
+ if (fieldValue instanceof String && sensitive != 0 && !field.isAnnotationPresent(UnmaskedSensitiveData.class)) {
+ field.set(value, maskText((String) fieldValue, sensitive));
+ }
else mask(fieldValue, visited);
} catch (IllegalAccessException ignored) { }
}
diff --git a/cloud-server-account/src/main/java/com/dsh/privacy/UnmaskedSensitiveData.java b/cloud-server-account/src/main/java/com/dsh/privacy/UnmaskedSensitiveData.java
new file mode 100644
index 0000000..95b6240
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/privacy/UnmaskedSensitiveData.java
@@ -0,0 +1,15 @@
+package com.dsh.privacy;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows a single response field to bypass sensitive-data masking.
+ * Use only for endpoints that are authorised to return the original value.
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UnmaskedSensitiveData {
+}
--
Gitblit v1.7.1