fastjson实现数据脱敏
时间: 2023-11-09 21:08:11 浏览: 186
spring MVC 对 ResponseBody返回json数据进行脱敏处理
Fastjson是一种高性能的Java JSON处理器。它提供了很多方便的功能,包括数据脱敏。
数据脱敏是指在保护数据的机密性和隐私性的前提下,对敏感数据进行部分隐藏或替换,以避免敏感信息泄露。Fastjson可以通过自定义序列化器和反序列化器,实现对数据的脱敏处理。
下面是一个简单的例子,演示如何使用Fastjson实现数据脱敏:
```java
public class User {
private String name;
private String idCard;
private String phone;
// 省略getter和setter方法
// 自定义序列化器,对身份证号进行脱敏处理
public static class IdCardSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features)
throws IOException {
String idCard = (String) object;
if (idCard == null || idCard.isEmpty()) {
serializer.writeNull();
} else {
String maskedIdCard = idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1**********$2");
serializer.write(maskedIdCard);
}
}
}
// 自定义反序列化器,对身份证号进行解密处理
public static class IdCardDeserializer implements ObjectDeserializer {
@Override
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String idCard = parser.parseObject(String.class);
if (idCard == null || idCard.isEmpty()) {
return null;
} else {
return (T) decrypt(idCard); // 解密身份证号
}
}
@Override
public int getFastMatchToken() {
return JSONToken.LITERAL_STRING;
}
private String decrypt(String idCard) {
// 解密身份证号
return idCard;
}
}
}
```
在上面的例子中,我们定义了一个User类,包含了name、idCard和phone三个属性。我们通过自定义序列化器和反序列化器,对idCard进行脱敏处理和解密处理。
在序列化时,我们使用了自定义的IdCardSerializer序列化器对idCard进行脱敏处理,将其中的中间10位数字替换成星号。在反序列化时,我们使用了自定义的IdCardDeserializer反序列化器对idCard进行解密处理,将加密的身份证号转换成明文身份证号。
当我们需要序列化User对象时,只需要将User对象传给Fastjson的toJSONString方法即可:
```java
User user = new User();
user.setName("张三");
user.setIdCard("110101199001011234");
user.setPhone("13888888888");
String jsonString = JSON.toJSONString(user);
System.out.println(jsonString);
```
输出结果为:
```json
{"idCard":"1101**********1234","name":"张三","phone":"13888888888"}
```
可以看到,idCard已经被脱敏处理了。
当我们需要反序列化JSON字符串时,只需要将JSON字符串传给Fastjson的parseObject方法即可:
```java
String jsonString = "{\"idCard\":\"1101**********1234\",\"name\":\"张三\",\"phone\":\"13888888888\"}";
User user = JSON.parseObject(jsonString, User.class);
System.out.println(user.getIdCard());
```
输出结果为:
```java
110101199001011234
```
可以看到,idCard已经被成功解密了。
阅读全文