Browse Source

update 优化 数据脱敏pr 使用接口提高扩展性

疯狂的狮子li 3 năm trước cách đây
mục cha
commit
51b19fcff4

+ 18 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/service/SensitiveService.java

@@ -0,0 +1,18 @@
+package com.ruoyi.common.core.service;
+
+/**
+ * 脱敏服务
+ * 默认管理员不过滤
+ * 需自行根据业务重写实现
+ *
+ * @author Lion Li
+ * @version 3.6.0
+ */
+public interface SensitiveService {
+
+    /**
+     * 是否脱敏
+     */
+    boolean isSensitive();
+
+}

+ 4 - 2
ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java

@@ -7,8 +7,9 @@ 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.core.service.SensitiveService;
 import com.ruoyi.common.enums.SensitiveStrategy;
-import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 
 import java.io.IOException;
 import java.util.Objects;
@@ -23,7 +24,8 @@ public class SensitiveJsonSerializer extends JsonSerializer<String> implements C
 
     @Override
     public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
-        if (SecurityUtils.isAdmin(SecurityUtils.getLoginUser().getUserId()) || SecurityUtils.getLoginUser().getMenuPermissions().contains("Sensitive")){
+        SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class);
+        if (sensitiveService.isSensitive()){
             gen.writeString(value);
         } else {
             gen.writeString(strategy.desensitizer().apply(value));

+ 41 - 42
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java

@@ -1,63 +1,38 @@
 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.annotation.Sensitive;
 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;
+import com.ruoyi.common.enums.SensitiveStrategy;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
- * 测试单表Controller
+ * 测试数据脱敏控制器
+ *
+ * 默认管理员不过滤
+ * 需自行根据业务重写实现
  *
+ * @see com.ruoyi.common.core.service.SensitiveService
  * @author Lion Li
- * @date 2021-07-26
+ * @version 3.6.0
  */
-@Validated
 @Api(value = "测试数据脱敏控制器", tags = {"测试数据脱敏管理"})
-@RequiredArgsConstructor(onConstructor_ = @Autowired)
 @RestController
 @RequestMapping("/demo/sensitive")
 public class TestSensitiveController extends BaseController {
 
-    //默认为admin用户及拥有Sensitive权限字符用户不做脱敏
-    //1.配置菜单加入权限字符为Sensitive的按钮
-    //2.配置需要免除数据脱敏的角色加入Sensitive权限
-    //3.实体类上加上数据脱敏注解
     /**
      * 测试数据脱敏
      */
     @ApiOperation("查询测试单表列表")
-    @GetMapping()
-    public AjaxResult<TestSensitive> get() {
+    @GetMapping("/test")
+    public AjaxResult<TestSensitive> test() {
         TestSensitive testSensitive = new TestSensitive()
             .setIdCard("3333199910101212")
             .setPhone("18888888888")
@@ -65,4 +40,28 @@ public class TestSensitiveController extends BaseController {
         return AjaxResult.success(testSensitive);
     }
 
+    @Data
+    @Accessors(chain = true)
+    static class TestSensitive {
+
+        /**
+         * 身份证
+         */
+        @Sensitive(strategy = SensitiveStrategy.ID_CARD)
+        private String idCard;
+
+        /**
+         * 电话
+         */
+        @Sensitive(strategy = SensitiveStrategy.PHONE)
+        private String phone;
+
+        /**
+         * 地址
+         */
+        @Sensitive(strategy = SensitiveStrategy.ADDRESS)
+        private String address;
+
+    }
+
 }

+ 0 - 35
ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java

@@ -1,35 +0,0 @@
-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;
-}

+ 26 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java

@@ -0,0 +1,26 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.service.SensitiveService;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * 脱敏服务
+ * 默认管理员不过滤
+ * 需自行根据业务重写实现
+ *
+ * @author Lion Li
+ * @version 3.6.0
+ */
+@Service
+public class SysSensitiveServiceImpl implements SensitiveService {
+
+    /**
+     * 是否脱敏
+     */
+    @Override
+    public boolean isSensitive() {
+        return SecurityUtils.isAdmin(SecurityUtils.getUserId());
+    }
+
+}