Appearance
数据脱敏
数据脱敏支持数据上链新增及修改
上链数据实体示例代码
import cn.opendatachain.common.annotation.Desensitization;
import cn.opendatachain.common.util.DesensitizationUtils;
import lombok.Data;
/**
* TestData 测试数据
*
* @author 郭志斌
* @version nmdc-contract 1.0.0.RELEASE
* <b>Creation Time:</b> 2022/8/24 15:04
*/
@Data
public class Dataset {
/**
* 数据集标识 CSTR,注意标识不要进行脱敏处理
*/
private String cstr;
/**
* 中文姓名
*/
@Desensitization(type = DesensitizationUtils.DataType.CHINESE_NAME)
private String name;
/**
* 移动电话
*/
@Desensitization(type = DesensitizationUtils.DataType.MOBILE_PHONE)
private String mobile;
}
// 创建数据脱敏对象并在属性上增加注解 @Desensitization
目前支持脱敏的数据类型包括,可自定义扩展:
- [x] 用户ID
- [x] 用户名,中文/英文
- [x] 身份证号
- [x] 固定电话号码
- [x] 移动电话号码
- [x] 地址
- [x] 电子邮件
- [x] 密码
- [x] 车牌号
合约示例代码
/**
* 数据上链
*
* @param dataset 数据上链对象
* @return Mono<ODCResponse>
*/
@Operation(summary = "数据上链")
@PostMapping("/test.upsert")
public Mono<ODCResponse> upsert(@RequestBody Dataset dataset) throws IllegalAccessException {
//获取交易对象
Transaction transaction = context.getTransaction();
//转换为 json 数据格式
String json = jsonUtils.toJson(dataset);
log.debug("脱敏前数据 json :{}", json);
// 数据脱敏处理
Dataset desensitizingDataset = transaction.desensitizing(dataset);
//转换为 json 数据格式
String desensitizingJson = jsonUtils.toJson(desensitizingDataset);
log.debug("脱敏后数据 json :{}", desensitizingJson);
//注意上链时使用脱敏后的数据
ContractPayload payload = transaction.payloadBuilder(dataset.getCstr(), desensitizingJson);
log.debug("ContractPayload : {}", jsonUtils.toJson(payload));
// 数据上链
return transaction.upsert(payload);
}