使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据
Posted
技术标签:
【中文标题】使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据【英文标题】:Remove sensitive-data from exception logs during serialize/deserialize JSON content while using com.fasterxml.jackson.databind.ObjectMapper 【发布时间】:2021-10-19 01:02:38 【问题描述】:背景: 我们正在使用 com.fasterxml.jackson.databind.ObjectMapper 的 readValue() 方法将 JSON 转换为 Java POJO。当 JsonParseException 或 JsonMappingException 发生时,原始数据摘录(JSON 内容)正在打印到日志中。
问题: 我们的 JSON 可能包含敏感数据,因此不应记录它以满足安全合规性。
我们正在考虑的选项...
选项1:用JsonParseException、JsonMappingException包装readValue()方法并添加clearLocation()
fyi... clearLocation() on JsonParseException 和 JsonMappingException 从异常消息中删除上下文信息
try
objectMapper.readValue(jsonContent, pojoObject);
catch (JsonParseException | JsonMappingException e)
e.clearLocation();
throw e;
此解决方案的缺点是,readValue() 方法在多个应用程序的很多地方都使用。所以我们需要处理大量的代码更改。我们不应该忘记在未来的实现中调用 clearLocation()。
选项 2:创建自定义 ObjectMapper
public class CustomObjectMapper
private static ObjectMapper objectMapper = new ObjectMapper();
// showing only one method to simplify
public static <T> T convertJsonToPojo(String content, Class<T> valueType)
throws IOException, JsonParseException, JsonMappingException
try
return objectMapper.readValue(content, valueType);
catch (JsonParseException | JsonMappingException e)
e.clearLocation();
throw e;
catch (JsonProcessingException e)
e.clearLocation();
throw e;
catch (Exception e)
throw e;
如果您遇到类似情况并采取不同的处理方式,请告诉我。
【问题讨论】:
不应该只记录您想查看的字段吗?否则即使使用 elk 或 splunk 之类的工具,搜索日志也会非常忙碌 第二个选项没问题,但我会考虑使用方面或异常处理程序。 【参考方案1】:你可以使用方面;
@Aspect
@Component
public class OMAspect
@Around("within(<your base package>..*)")
public Object aroundOMMethods(ProceedingJoinPoint joinPoint) throws Throwable
try
return joinPoint.proceed();
catch (JsonProcessingException e)
e.clearLocation();
throw e;
catch (Throwable e)
throw e;
【讨论】:
我还认为在这里使用方面会是一个很好的解决方案!以上是关于使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据的主要内容,如果未能解决你的问题,请参考以下文章
(转)关于Jackson2.x中com.fasterxml.jackson包的用法
com.fasterxml.jackson.core.JsonParseException:无法识别的令牌
com.fasterxml.jackson.databind.exc.MismatchedInputException:
导入 com.fasterxml.jackson.databind.ObjectMapper 无法解析
fasterxml jackson 的包冲突太垃圾太恶心了: Could not initialize class com.fasterxml.jackson.databind.Seriali...