可以考虑使用自定义序列化和反序列化来解决这个问题。

  1. 自定义序列化器:在序列化对象时,判断对象是否有密码信息,如果有,则将密码信息存入一个临时变量中,并将密码信息设为空,然后再进行序列化。代码示例:
public class UserSerializer extends JsonSerializer<User> {

    @Override
    public void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("name", user.getName());
        jsonGenerator.writeStringField("age", user.getAge());
        if (StringUtils.isNotBlank(user.getPassword())) {
            jsonGenerator.writeFieldName("password");
            jsonGenerator.writeObject(user.getPassword());
        }
        jsonGenerator.writeEndObject();
    }
}
  1. 自定义反序列化器:在反序列化对象时,判断是否有密码信息,如果有,则将临时变量中的密码信息重新设置到对象中。代码示例:
public class UserDeserializer extends JsonDeserializer<User> {

    @Override
    public User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        ObjectCodec codec = jsonParser.getCodec();
        JsonNode node = codec.readTree(jsonParser);
        String name = node.get("name").asText();
        String age = node.get("age").asText();
        String password = null;
        if (node.has("password")) {
            password = node.get("password").asText();
        }
        User user = new User(name, age, password);
        return user;
    }
}

在使用的时候,可以在对象的密码字段上加上@JsonIgnore注解,然后在Redis的配置中,指定自定义的序列化器和反序列化器。这样就可以在序列化和反序列化时,动态处理密码信息了

springboot使用redis做缓存密码信息需要设置为JsonIgnore但是存入redis使用json序列化又需要密码信息怎么处理呢

原文地址: https://www.cveoy.top/t/topic/e2JU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录