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

This commit is contained in:
疯狂的狮子li 2021-12-28 11:51:01 +08:00
parent c4cfaab621
commit 51b19fcff4
5 changed files with 89 additions and 79 deletions

View File

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

View File

@ -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));

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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());
}
}