如何通过Jackson生成器对Escape值进行HTML转换

我们使用Spring及其内置的MappingJacksonHttpMessageConverter生成许多JSON对象。一切都很好。

但是现在我想对我(任何类型)对象的String值进行 ,以防止XSS。

那么,我该如何解决这个问题呢?我首先想到我可以编写一个自定义对象映射器,然后将其放入MappkingJacksonHttpMessageConverter中。但是,writeValue需要一个Object,我不想要那个,我想让它的

进行迭代。我敢打赌杰克逊转换器也需要自己做,而不是自己做。所以我想影响那部分。

现在,我得到一个SerializerProvider接口。ObjectMapper调用了标准实现(StdSerializerProvider)。因此,我想在某处覆盖/影响负责设置值的方法。

那可能吗?据我所知,很难扩展。我无法覆盖StdSerializerProvider来覆盖ObjectMapper使用的方法。也许我需要覆盖另一个?

或者,也许这是完全错误的,我需要从一个完全不同的角度来解决?

有什么想法吗?

哦,顺便说一句,我自己实现SerializerProvider并创建一个委托给StdSerializerProvider的复合程序是可能的,但我宁愿不这样做。(我已经无法亲自实例化StdSerializerProvider)。

任何想法表示赞赏!

回答:

有多种方法,具体取决于您如何识别要逃避的事物。一些想法:

  • 如果要引用/转义所有字符串,则可以定义自定义字符串序列化程序
  • 您可以首先序列化为JSON树(JsonNode)-ObjectMapper.convertValue(pojo,JsonNode.class)-对其进行修改,然后序列化为JSON(ObjectMapper.writeValue(intermediateTree))
  • 如果您想要一个灵活的系统,可以为需要特殊处理的字段添加注释,则可以使用ContextualSerializers的Jackson 1.7功能;可以基于注释重新配置自身的自定义序列化程序。乍一看似乎有些矫kill过正,但这可用于轻松地指定自定义修饰符(具有Class值的注释属性,它指示序列化程序可以调用以修改要序列化的值的对象,例如转义)

以上是 如何通过Jackson生成器对Escape值进行HTML转换 的全部内容, 来源链接: utcz.com/qa/425159.html

回到顶部