update 优化 数据脱敏pr 使用接口提高扩展性
This commit is contained in:
parent
c4cfaab621
commit
51b19fcff4
@ -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.SerializerProvider;
|
||||||
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
||||||
import com.ruoyi.common.annotation.Sensitive;
|
import com.ruoyi.common.annotation.Sensitive;
|
||||||
|
import com.ruoyi.common.core.service.SensitiveService;
|
||||||
import com.ruoyi.common.enums.SensitiveStrategy;
|
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.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -23,7 +24,8 @@ public class SensitiveJsonSerializer extends JsonSerializer<String> implements C
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
|
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);
|
gen.writeString(value);
|
||||||
} else {
|
} else {
|
||||||
gen.writeString(strategy.desensitizer().apply(value));
|
gen.writeString(strategy.desensitizer().apply(value));
|
||||||
|
@ -1,63 +1,38 @@
|
|||||||
package com.ruoyi.demo.controller;
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import com.ruoyi.common.annotation.Sensitive;
|
||||||
import com.ruoyi.common.annotation.Log;
|
|
||||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.enums.SensitiveStrategy;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import io.swagger.annotations.Api;
|
||||||
import com.ruoyi.common.core.validate.AddGroup;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import com.ruoyi.common.core.validate.EditGroup;
|
import lombok.Data;
|
||||||
import com.ruoyi.common.core.validate.QueryGroup;
|
import lombok.experimental.Accessors;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import com.ruoyi.common.excel.ExcelResult;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import com.ruoyi.common.utils.ValidatorUtils;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试单表Controller
|
* 测试数据脱敏控制器
|
||||||
*
|
*
|
||||||
|
* 默认管理员不过滤
|
||||||
|
* 需自行根据业务重写实现
|
||||||
|
*
|
||||||
|
* @see com.ruoyi.common.core.service.SensitiveService
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
* @date 2021-07-26
|
* @version 3.6.0
|
||||||
*/
|
*/
|
||||||
@Validated
|
|
||||||
@Api(value = "测试数据脱敏控制器", tags = {"测试数据脱敏管理"})
|
@Api(value = "测试数据脱敏控制器", tags = {"测试数据脱敏管理"})
|
||||||
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/demo/sensitive")
|
@RequestMapping("/demo/sensitive")
|
||||||
public class TestSensitiveController extends BaseController {
|
public class TestSensitiveController extends BaseController {
|
||||||
|
|
||||||
//默认为admin用户及拥有Sensitive权限字符用户不做脱敏
|
|
||||||
//1.配置菜单加入权限字符为Sensitive的按钮
|
|
||||||
//2.配置需要免除数据脱敏的角色加入Sensitive权限
|
|
||||||
//3.实体类上加上数据脱敏注解
|
|
||||||
/**
|
/**
|
||||||
* 测试数据脱敏
|
* 测试数据脱敏
|
||||||
*/
|
*/
|
||||||
@ApiOperation("查询测试单表列表")
|
@ApiOperation("查询测试单表列表")
|
||||||
@GetMapping()
|
@GetMapping("/test")
|
||||||
public AjaxResult<TestSensitive> get() {
|
public AjaxResult<TestSensitive> test() {
|
||||||
TestSensitive testSensitive = new TestSensitive()
|
TestSensitive testSensitive = new TestSensitive()
|
||||||
.setIdCard("3333199910101212")
|
.setIdCard("3333199910101212")
|
||||||
.setPhone("18888888888")
|
.setPhone("18888888888")
|
||||||
@ -65,4 +40,28 @@ public class TestSensitiveController extends BaseController {
|
|||||||
return AjaxResult.success(testSensitive);
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user