From c93b6661406b61ba9bca170273e74ae769bc31a6 Mon Sep 17 00:00:00 2001
From: 盘古给你一斧 <56600535@qq.com>
Date: 星期四, 09 十一月 2023 17:37:56 +0800
Subject: [PATCH] !444 @Sensitive脱敏增加角色和权限校验 * update 优化 脱敏增加角色及权限校验
---
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java | 8 ++++----
ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/annotation/Sensitive.java | 4 ++++
ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveService.java | 2 +-
ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/handler/SensitiveHandler.java | 6 +++++-
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java | 19 ++++++++++++++++++-
5 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/annotation/Sensitive.java b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/annotation/Sensitive.java
index f2def8a..1dfc896 100644
--- a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/annotation/Sensitive.java
+++ b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/annotation/Sensitive.java
@@ -21,4 +21,8 @@
@JsonSerialize(using = SensitiveHandler.class)
public @interface Sensitive {
SensitiveStrategy strategy();
+
+ String roleKey() default "";
+
+ String perms() default "";
}
diff --git a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveService.java b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveService.java
index 4b57fcb..7b5264b 100644
--- a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveService.java
+++ b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveService.java
@@ -13,6 +13,6 @@
/**
* 鏄惁鑴辨晱
*/
- boolean isSensitive();
+ boolean isSensitive(String roleKey, String perms);
}
diff --git a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/handler/SensitiveHandler.java b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/handler/SensitiveHandler.java
index 3c8b78a..c76c83a 100644
--- a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/handler/SensitiveHandler.java
+++ b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/handler/SensitiveHandler.java
@@ -26,12 +26,14 @@
public class SensitiveHandler extends JsonSerializer<String> implements ContextualSerializer {
private SensitiveStrategy strategy;
+ private String roleKey;
+ private String perms;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
try {
SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class);
- if (ObjectUtil.isNotNull(sensitiveService) && sensitiveService.isSensitive()) {
+ if (ObjectUtil.isNotNull(sensitiveService) && sensitiveService.isSensitive(roleKey, perms)) {
gen.writeString(strategy.desensitizer().apply(value));
} else {
gen.writeString(value);
@@ -47,6 +49,8 @@
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.strategy = annotation.strategy();
+ this.roleKey = annotation.roleKey();
+ this.perms = annotation.perms();
return this;
}
return prov.findValueSerializer(property.getType(), property);
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java
index 8d6ad53..eba0552 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestSensitiveController.java
@@ -50,25 +50,25 @@
/**
* 鐢佃瘽
*/
- @Sensitive(strategy = SensitiveStrategy.PHONE)
+ @Sensitive(strategy = SensitiveStrategy.PHONE, roleKey = "common")
private String phone;
/**
* 鍦板潃
*/
- @Sensitive(strategy = SensitiveStrategy.ADDRESS)
+ @Sensitive(strategy = SensitiveStrategy.ADDRESS, perms = "system:user:query")
private String address;
/**
* 閭
*/
- @Sensitive(strategy = SensitiveStrategy.EMAIL)
+ @Sensitive(strategy = SensitiveStrategy.EMAIL, roleKey = "common", perms = "system:user:query1")
private String email;
/**
* 閾惰鍗�
*/
- @Sensitive(strategy = SensitiveStrategy.BANK_CARD)
+ @Sensitive(strategy = SensitiveStrategy.BANK_CARD, roleKey = "common1", perms = "system:user:query")
private String bankCard;
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java
index 1202c33..2f2493a 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java
@@ -1,5 +1,7 @@
package org.dromara.system.service.impl;
+import cn.dev33.satoken.stp.StpUtil;
+import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sensitive.core.SensitiveService;
import org.dromara.common.tenant.helper.TenantHelper;
@@ -20,7 +22,22 @@
* 鏄惁鑴辨晱
*/
@Override
- public boolean isSensitive() {
+ public boolean isSensitive(String roleKey, String perms) {
+ if (!StpUtil.isLogin()) {
+ return true;
+ }
+ boolean roleExist = StringUtils.isNotEmpty(roleKey);
+ boolean permsExist = StringUtils.isNotEmpty(perms);
+ if (roleExist && permsExist) {
+ if (StpUtil.hasRole(roleKey) && StpUtil.hasPermission(perms)) {
+ return false;
+ }
+ } else if (roleExist && StpUtil.hasRole(roleKey)) {
+ return false;
+ } else if (permsExist && StpUtil.hasPermission(perms)) {
+ return false;
+ }
+
if (TenantHelper.isEnable()) {
return !LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin();
}
--
Gitblit v1.9.3