Commit 15859417 authored by suntao's avatar suntao

数据库脱敏

parent bf13b755
package cn.quantgroup.customer.rest.vo.phone;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
@Data
public class ModifyPhoneNo implements Serializable {
private static final long serialVersionUID = 0x93c999d06b6f64d2L;
private Long id;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Timestamp createdAt;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Timestamp updatedAt;
/**
* user.id
*/
private Long userId;
/**
* 注册人真实姓名
*/
private String name;
/**
* 注册人身份证件号
*/
private String idCard;
/**
* 原手机号码
*/
private String prevPhoneNo;
/**
* 新手机号码
*/
private String curPhoneNo;
/**
* 身份证正面
*/
private String idCardFaceUrl;
/**
* 身份证背面
*/
private String idCardRearUrl;
/**
* 本人手持身份证照片
*/
private String idCardHoldUrl;
/**
* 申请状态 0处理中; 1修改完成; 2不允许修改;
*/
private Integer applyStatus;
/**
* 申请状态补充原因
*/
private String applyStatusReason;
/**
* 处理状态 0待人工处理 1待用户反馈结果 2已反馈
*/
private Integer processingStatus;
}
......@@ -9,6 +9,8 @@ import cn.quantgroup.customer.rest.param.user.UserCombinationParam;
import cn.quantgroup.customer.rest.param.user.UserQueryParam;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.rest.vo.MoResult;
import cn.quantgroup.customer.rest.vo.phone.ModifyPhoneNo;
import org.springframework.data.domain.Page;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service;
......
......@@ -21,6 +21,7 @@ import cn.quantgroup.customer.rest.param.user.UserCombinationParam;
import cn.quantgroup.customer.rest.param.user.UserQueryParam;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.rest.vo.MoResult;
import cn.quantgroup.customer.rest.vo.phone.ModifyPhoneNo;
import cn.quantgroup.customer.service.IIceService;
import cn.quantgroup.customer.service.IKaService;
import cn.quantgroup.customer.service.IUserService;
......@@ -31,6 +32,7 @@ import cn.quantgroup.riskcontrol.model.AuthenticationUserDetail;
import cn.quantgroup.user.retbean.XUser;
import cn.quantgroup.user.retbean.XUserDetail;
import cn.quantgroup.user.vo.UserSysResult;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
......@@ -41,6 +43,8 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
......@@ -50,6 +54,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static cn.quantgroup.customer.constant.Constant.GSON;
......@@ -101,10 +106,40 @@ public class UserServiceImpl implements IUserService {
Map param = gson.fromJson(gson.toJson(modifyPhoneQuery), Map.class);
try {
String response = httpService.get(url, param);
// log.info("[user][query modify phone list] 请求业务系统返回值,modifyPhoneQuery:{},response={}", modifyPhoneQuery, response);
if (StringUtils.isEmpty(response)) {
log.error("[user][query modify phone list] 请求业务系统返回值为空,modifyPhoneQuery:{}", modifyPhoneQuery);
return response;
}
JSONObject jsonObject = JSONObject.parseObject(response);
JSONObject data = jsonObject.getJSONObject("data");
if (data == null) {
log.error("[user][query modify phone list] 请求业务系统返回值为空,modifyPhoneQuery:{}", modifyPhoneQuery);
return response;
}
String content = data.getString("content");
if (StringUtils.isEmpty(content)) {
log.error("[user][query modify phone list] 请求业务系统返回值为空,modifyPhoneQuery:{}", modifyPhoneQuery);
return response;
}
TypeReference<List<ModifyPhoneNo>> typeToken = new TypeReference<List<ModifyPhoneNo>>() {
};
List<ModifyPhoneNo> list = JSONTools.deserialize(content, typeToken);
if (list == null) {
return response;
}
list.stream().peek(it -> {
it.setPrevPhoneNo(DesensitizeUtil.mobileDesensitization(it.getPrevPhoneNo()));
it.setCurPhoneNo(DesensitizeUtil.mobileDesensitization(it.getCurPhoneNo()));
it.setIdCard(DesensitizeUtil.idcardDesensitization(it.getIdCard()));
}).collect(Collectors.toList());
data.put("content", list);
jsonObject.put("data", data);
return JSONTools.serialize(jsonObject);
} catch (Exception e) {
log.error("[user][query modify phone list] 网络通讯异常,modifyPhoneQuery:{},ex:{}", modifyPhoneQuery, ExceptionUtils.getStackTrace(e));
throw new BusinessException(ErrorCodeEnum.NET_ERROR);
......
......@@ -7,6 +7,7 @@ import cn.quantgroup.customer.repo.WorkOrderRepo;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.service.IWorkOrderService;
import cn.quantgroup.customer.util.DateUtil;
import cn.quantgroup.customer.util.DesensitizeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -56,7 +57,7 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
WorkOrderVO workOrderVO = new WorkOrderVO();
workOrderVO.setWorkOrderId(it.getWorkOrderId() != null ? it.getWorkOrderId()+"" : null);
workOrderVO.setUserName(it.getUserName());
workOrderVO.setPhone(it.getPhone());
workOrderVO.setPhone(DesensitizeUtil.mobileDesensitization(it.getPhone()));
workOrderVO.setSubject(it.getSubject());
workOrderVO.setFrom(it.getFrom());
workOrderVO.setType1(it.getType1());
......
......@@ -82,4 +82,28 @@ public class DesensitizeUtil {
return right(idNo,4);
}
// 手机号码前三后四脱敏
public static String mobileDesensitization(String mobile) {
if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) {
return mobile;
}
return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
//身份证前三后四脱敏
public static String idcardDesensitization(String idcard) {
if (StringUtils.isEmpty(idcard) || (idcard.length() < 8)) {
return idcard;
}
return idcard.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*");
}
//护照前2后3位脱敏,护照一般为8或9位
public static String idPassportDesensitization(String idPassport) {
if (StringUtils.isEmpty(idPassport) || (idPassport.length() < 8)) {
return idPassport;
}
return idPassport.substring(0, 2) + new String(new char[idPassport.length() - 5]).replace("\0", "*") + idPassport.substring(idPassport.length() - 3);
}
}
......@@ -5,6 +5,7 @@ import cn.quantgroup.customer.model.workorder.WorkOrderStatus;
import cn.quantgroup.customer.model.workorder.WorkOrderVO;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.service.IWorkOrderService;
import cn.quantgroup.customer.util.DesensitizeUtil;
import cn.quantgroup.customer.util.JSONTools;
import com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer;
import lombok.extern.slf4j.Slf4j;
......@@ -38,4 +39,9 @@ public class WorkOrderTest {
System.out.println(JSONTools.serialize(pageJsonResult));
}
public static void main(String[] args) {
System.out.println(DesensitizeUtil.mobileDesensitization("13597778033"));
System.out.println(DesensitizeUtil.idcardDesensitization("422802199007261711"));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment