疯狂的狮子li
2021-12-28 51b19fcff40978fa9dcfae920d50bf5681bb9c4a
update 优化 数据脱敏pr 使用接口提高扩展性
已添加2个文件
已修改2个文件
已删除1个文件
168 ■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/core/service/SensitiveService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
}
ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java
@@ -7,8 +7,9 @@
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 @@
    @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));
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 @@
        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;
    }
}
ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java
ÎļþÒÑɾ³ý
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());
    }
}