|
@@ -1,6 +1,5 @@
|
|
|
package com.chelvc.framework.database.handler;
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
import java.lang.reflect.AnnotatedElement;
|
|
|
import java.lang.reflect.Array;
|
|
|
import java.lang.reflect.Method;
|
|
@@ -20,17 +19,17 @@ import java.util.Set;
|
|
|
import com.chelvc.framework.common.util.JacksonUtils;
|
|
|
import com.chelvc.framework.common.util.ObjectUtils;
|
|
|
import com.chelvc.framework.database.annotation.Sensitive;
|
|
|
-import com.chelvc.framework.database.context.DatabaseContextHolder;
|
|
|
-import com.fasterxml.jackson.core.JsonGenerator;
|
|
|
-import com.fasterxml.jackson.core.JsonParser;
|
|
|
-import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveArrayDeserializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveArraySerializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveDeserializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveListDeserializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveListSerializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveSerializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveSetDeserializer;
|
|
|
+import com.chelvc.framework.database.jackson.SensitiveSetSerializer;
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
-import com.fasterxml.jackson.databind.DeserializationContext;
|
|
|
import com.fasterxml.jackson.databind.JavaType;
|
|
|
-import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
|
-import com.fasterxml.jackson.databind.JsonSerializer;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-import com.fasterxml.jackson.databind.SerializerProvider;
|
|
|
import com.fasterxml.jackson.databind.introspect.Annotated;
|
|
|
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
|
|
import com.fasterxml.jackson.databind.type.CollectionType;
|
|
@@ -49,109 +48,6 @@ import org.apache.ibatis.type.TypeHandler;
|
|
|
* @date 2024/4/3
|
|
|
*/
|
|
|
public interface JsonTypeHandler<T> extends TypeHandler<T> {
|
|
|
- /**
|
|
|
- * 敏感字符串序列化处理器
|
|
|
- */
|
|
|
- class SensitiveSerializer extends JsonSerializer<String> {
|
|
|
- @Override
|
|
|
- public void serialize(String value, JsonGenerator generator, SerializerProvider provider) throws IOException {
|
|
|
- if (DatabaseContextHolder.getDatabaseCipherHandler().isWritable()) {
|
|
|
- value = DatabaseContextHolder.getDatabaseCipherHandler().encrypt(value, true);
|
|
|
- }
|
|
|
- generator.writeString(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串数组序列化处理器
|
|
|
- */
|
|
|
- class SensitiveArraySerializer extends JsonSerializer<String[]> {
|
|
|
- @Override
|
|
|
- public void serialize(String[] value, JsonGenerator generator, SerializerProvider provider)
|
|
|
- throws IOException {
|
|
|
- if (DatabaseContextHolder.getDatabaseCipherHandler().isWritable()) {
|
|
|
- value = DatabaseContextHolder.getDatabaseCipherHandler().encrypt(value, true);
|
|
|
- }
|
|
|
- generator.writeObject(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串集合序列化处理器
|
|
|
- */
|
|
|
- class SensitiveSetSerializer extends JsonSerializer<Set<String>> {
|
|
|
- @Override
|
|
|
- public void serialize(Set<String> value, JsonGenerator generator, SerializerProvider provider)
|
|
|
- throws IOException {
|
|
|
- if (DatabaseContextHolder.getDatabaseCipherHandler().isWritable()) {
|
|
|
- value = DatabaseContextHolder.getDatabaseCipherHandler().encrypt(value, true);
|
|
|
- }
|
|
|
- generator.writeObject(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串列表序列化处理器
|
|
|
- */
|
|
|
- class SensitiveListSerializer extends JsonSerializer<List<String>> {
|
|
|
- @Override
|
|
|
- public void serialize(List<String> value, JsonGenerator generator, SerializerProvider provider)
|
|
|
- throws IOException {
|
|
|
- if (DatabaseContextHolder.getDatabaseCipherHandler().isWritable()) {
|
|
|
- value = DatabaseContextHolder.getDatabaseCipherHandler().encrypt(value, true);
|
|
|
- }
|
|
|
- generator.writeObject(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串反序列化处理器
|
|
|
- */
|
|
|
- class SensitiveDeserializer extends JsonDeserializer<String> {
|
|
|
- @Override
|
|
|
- public String deserialize(JsonParser parser, DeserializationContext context)
|
|
|
- throws IOException, JsonProcessingException {
|
|
|
- String value = parser.getValueAsString();
|
|
|
- return DatabaseContextHolder.getDatabaseCipherHandler().decrypt(value, true);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串数组反序列化处理器
|
|
|
- */
|
|
|
- class SensitiveArrayDeserializer extends JsonDeserializer<String[]> {
|
|
|
- @Override
|
|
|
- public String[] deserialize(JsonParser parser, DeserializationContext context)
|
|
|
- throws IOException, JsonProcessingException {
|
|
|
- String[] values = parser.readValueAs(JacksonUtils.STRING_ARRAY_TYPE);
|
|
|
- return DatabaseContextHolder.getDatabaseCipherHandler().decrypt(values, true);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串集合反序列化处理器
|
|
|
- */
|
|
|
- class SensitiveSetDeserializer extends JsonDeserializer<Set<String>> {
|
|
|
- @Override
|
|
|
- public Set<String> deserialize(JsonParser parser, DeserializationContext context)
|
|
|
- throws IOException, JsonProcessingException {
|
|
|
- Set<String> values = parser.readValueAs(JacksonUtils.STRING_SET_TYPE);
|
|
|
- return DatabaseContextHolder.getDatabaseCipherHandler().decrypt(values, true);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 敏感字符串列表反序列化处理器
|
|
|
- */
|
|
|
- class SensitiveListDeserializer extends JsonDeserializer<List<String>> {
|
|
|
- @Override
|
|
|
- public List<String> deserialize(JsonParser parser, DeserializationContext context)
|
|
|
- throws IOException, JsonProcessingException {
|
|
|
- List<String> values = parser.readValueAs(JacksonUtils.STRING_LIST_TYPE);
|
|
|
- return DatabaseContextHolder.getDatabaseCipherHandler().decrypt(values, true);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 对象JSON序列化/反序列化处理器实例
|
|
|
*/
|