项目内的日志脱敏思路是:
1)继承logback的Filter,读取ILoggingEvent中的argumentArray,篡改数组中的值;
2)篡改时,根据数组中继承指定注解,来感知哪些字段需要脱敏,对其使用个性化的ObjectMapper进行json序列化,来实现值的篡改。
整体思路ok,但是在2)的实现中,使用继承JacksonAnnotationIntrospector的,注入ObjectMapper的方式,实时解析字段上的注解来实现,稳定性比较差,嵌套等场景容易失效。
更好的思路应该是:
1 应该对所有字段统一json处理打印,而不是挑着注解的字段进行json序列化。
2 不建议采用Introspector方法,因不是读取的字段的注解而是getter注解,使得其可用性不稳定,各种场景可能无法正常序列化。应该采用的方案:1)跳过Introspector,直接修改所有的Serializer,提前拿一下注解,有注解就处理脱敏。2)指定字段名清单,jackson序列化时,获取字段名,命中则直接跳过打印,作为第一个思路的失败兜底思路。