mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 优化 数据脱敏pr 使用接口提高扩展性
This commit is contained in:
		@@ -0,0 +1,18 @@
 | 
			
		||||
package com.ruoyi.common.core.service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 脱敏服务
 | 
			
		||||
 * 默认管理员不过滤
 | 
			
		||||
 * 需自行根据业务重写实现
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 * @version 3.6.0
 | 
			
		||||
 */
 | 
			
		||||
public interface SensitiveService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否脱敏
 | 
			
		||||
     */
 | 
			
		||||
    boolean isSensitive();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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));
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
@@ -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());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user