From 7c533a21d2da2c9c106e1a477bdb68532715e7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=80=E6=A3=AE?= Date: Thu, 9 Nov 2023 16:03:53 +0800 Subject: [PATCH 1/5] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=A2=9E=E5=8A=A0=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/UserConstants.java | 5 +++++ .../sensitive/annotation/Sensitive.java | 5 +++++ .../sensitive/core/SensitiveService.java | 2 +- .../sensitive/handler/SensitiveHandler.java | 6 +++++- .../controller/TestSensitiveController.java | 4 ++-- .../service/impl/SysSensitiveServiceImpl.java | 19 ++++++++++++++++++- 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java index 6f3b0b96b..951b8371d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java @@ -139,4 +139,9 @@ public interface UserConstants { */ Long SUPER_ADMIN_ID = 1L; + /** + * 角色及菜单权限脱敏标识 + */ + String SENSITIVE = "sensitive"; + } 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 f2def8ab2..2648a52eb 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 @@ -2,6 +2,7 @@ package org.dromara.common.sensitive.annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.dromara.common.core.constant.UserConstants; import org.dromara.common.sensitive.core.SensitiveStrategy; import org.dromara.common.sensitive.handler.SensitiveHandler; @@ -21,4 +22,8 @@ import java.lang.annotation.Target; @JsonSerialize(using = SensitiveHandler.class) public @interface Sensitive { SensitiveStrategy strategy(); + + String roleKey() default UserConstants.SENSITIVE; + + String perms() default UserConstants.SENSITIVE; } 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 4b57fcb82..9571745c7 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 @@ public interface SensitiveService { /** * 是否脱敏 */ - 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 3c8b78a31..c76c83a98 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 @@ import java.util.Objects; public class SensitiveHandler extends JsonSerializer 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 @@ public class SensitiveHandler extends JsonSerializer implements Contextu 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 8d6ad5397..f4e9f19c9 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,13 +50,13 @@ public class TestSensitiveController extends BaseController { /** * 电话 */ - @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; /** 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 1202c33f2..38b5454cf 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,8 @@ package org.dromara.system.service.impl; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sensitive.core.SensitiveService; import org.dromara.common.tenant.helper.TenantHelper; @@ -20,7 +23,21 @@ public class SysSensitiveServiceImpl implements SensitiveService { * 是否脱敏 */ @Override - public boolean isSensitive() { + public boolean isSensitive(String roleKey,String perms) { + if (!StpUtil.isLogin()){ + return true; + } + LoginUser loginUser = LoginHelper.getLoginUser(); + if (ObjectUtil.isNotNull(loginUser)) { + boolean roleSensitiveFlag = loginUser.getRolePermission().stream().anyMatch(role -> role.contains(roleKey)); + if (roleSensitiveFlag) { + return false; + } + boolean permsSensitiveFlag = loginUser.getMenuPermission().stream().anyMatch(menu -> menu.contains(perms)); + if (permsSensitiveFlag) { + return false; + } + } if (TenantHelper.isEnable()) { return !LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin(); } From bb6f79913b8a58a77c1cf43c0610bc94957e5f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=80=E6=A3=AE?= Date: Thu, 9 Nov 2023 16:36:41 +0800 Subject: [PATCH 2/5] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=A2=9E=E5=8A=A0=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/core/constant/UserConstants.java | 5 ----- .../common/sensitive/annotation/Sensitive.java | 4 ++-- .../common/sensitive/core/SensitiveService.java | 2 +- .../system/service/impl/SysSensitiveServiceImpl.java | 12 ++---------- 4 files changed, 5 insertions(+), 18 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java index 951b8371d..6f3b0b96b 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java @@ -139,9 +139,4 @@ public interface UserConstants { */ Long SUPER_ADMIN_ID = 1L; - /** - * 角色及菜单权限脱敏标识 - */ - String SENSITIVE = "sensitive"; - } 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 2648a52eb..f78aac6c9 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 @@ -23,7 +23,7 @@ import java.lang.annotation.Target; public @interface Sensitive { SensitiveStrategy strategy(); - String roleKey() default UserConstants.SENSITIVE; + String roleKey() default ""; - String perms() default UserConstants.SENSITIVE; + 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 9571745c7..7b5264b87 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 @@ public interface SensitiveService { /** * 是否脱敏 */ - boolean isSensitive(String roleKey,String perms); + boolean isSensitive(String roleKey, String perms); } 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 38b5454cf..a34aff8c6 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 @@ -27,16 +27,8 @@ public class SysSensitiveServiceImpl implements SensitiveService { if (!StpUtil.isLogin()){ return true; } - LoginUser loginUser = LoginHelper.getLoginUser(); - if (ObjectUtil.isNotNull(loginUser)) { - boolean roleSensitiveFlag = loginUser.getRolePermission().stream().anyMatch(role -> role.contains(roleKey)); - if (roleSensitiveFlag) { - return false; - } - boolean permsSensitiveFlag = loginUser.getMenuPermission().stream().anyMatch(menu -> menu.contains(perms)); - if (permsSensitiveFlag) { - return false; - } + if (StpUtil.hasRole(roleKey) || StpUtil.hasPermission(perms)){ + return false; } if (TenantHelper.isEnable()) { return !LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin(); From 8a00416c409f81f44b0c813125affac6db6f4886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=80=E6=A3=AE?= Date: Thu, 9 Nov 2023 17:00:29 +0800 Subject: [PATCH 3/5] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=A2=9E=E5=8A=A0=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sensitive/annotation/Sensitive.java | 1 - .../controller/TestSensitiveController.java | 4 ++-- .../service/impl/SysSensitiveServiceImpl.java | 19 +++++++++++++++---- 3 files changed, 17 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 f78aac6c9..1dfc896ff 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 @@ -2,7 +2,6 @@ package org.dromara.common.sensitive.annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.dromara.common.core.constant.UserConstants; import org.dromara.common.sensitive.core.SensitiveStrategy; import org.dromara.common.sensitive.handler.SensitiveHandler; 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 f4e9f19c9..eba05527c 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 @@ -62,13 +62,13 @@ public class TestSensitiveController extends BaseController { /** * 邮箱 */ - @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 a34aff8c6..00e14b8e7 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,8 +1,7 @@ package org.dromara.system.service.impl; import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.util.ObjectUtil; -import org.dromara.common.core.domain.model.LoginUser; +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; @@ -27,9 +26,21 @@ public class SysSensitiveServiceImpl implements SensitiveService { if (!StpUtil.isLogin()){ return true; } - if (StpUtil.hasRole(roleKey) || StpUtil.hasPermission(perms)){ - return false; + + if (StringUtils.isNotEmpty(roleKey) && StringUtils.isNotEmpty(perms)){ + if (StpUtil.hasRole(roleKey) && StpUtil.hasPermission(perms)){ + return false; + } + }else if (StringUtils.isNotEmpty(roleKey)){ + if (StpUtil.hasRole(roleKey)){ + return false; + } + }else if (StringUtils.isNotEmpty(perms)){ + if (StpUtil.hasPermission(perms)){ + return false; + } } + if (TenantHelper.isEnable()) { return !LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin(); } From a619d2de512972684baa0e7ba61ef25f106736d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=80=E6=A3=AE?= Date: Thu, 9 Nov 2023 17:14:10 +0800 Subject: [PATCH 4/5] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=A2=9E=E5=8A=A0=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysSensitiveServiceImpl.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) 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 00e14b8e7..ab18437e6 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 @@ -26,19 +26,16 @@ public class SysSensitiveServiceImpl implements SensitiveService { if (!StpUtil.isLogin()){ return true; } - - if (StringUtils.isNotEmpty(roleKey) && StringUtils.isNotEmpty(perms)){ + boolean roleExist = StringUtils.isNotEmpty(roleKey); + boolean permsExist = StringUtils.isNotEmpty(perms); + if (roleExist && permsExist){ if (StpUtil.hasRole(roleKey) && StpUtil.hasPermission(perms)){ return false; } - }else if (StringUtils.isNotEmpty(roleKey)){ - if (StpUtil.hasRole(roleKey)){ - return false; - } - }else if (StringUtils.isNotEmpty(perms)){ - if (StpUtil.hasPermission(perms)){ - return false; - } + }else if (roleExist && StpUtil.hasRole(roleKey)){ + return false; + }else if (permsExist && StpUtil.hasPermission(perms)){ + return false; } if (TenantHelper.isEnable()) { From b81b4f658d4e6bd2fa8c606c3dd67a603a3b24b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=80=E6=A3=AE?= Date: Thu, 9 Nov 2023 17:15:02 +0800 Subject: [PATCH 5/5] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=A2=9E=E5=8A=A0=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/SysSensitiveServiceImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 ab18437e6..2f2493aa3 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 @@ -22,19 +22,19 @@ public class SysSensitiveServiceImpl implements SensitiveService { * 是否脱敏 */ @Override - public boolean isSensitive(String roleKey,String perms) { - if (!StpUtil.isLogin()){ + 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)){ + if (roleExist && permsExist) { + if (StpUtil.hasRole(roleKey) && StpUtil.hasPermission(perms)) { return false; } - }else if (roleExist && StpUtil.hasRole(roleKey)){ + } else if (roleExist && StpUtil.hasRole(roleKey)) { return false; - }else if (permsExist && StpUtil.hasPermission(perms)){ + } else if (permsExist && StpUtil.hasPermission(perms)) { return false; }