如何通过jackson生成器html转义值

我们使用Spring及其内置的MappingJacksonHttpMessageConverter生成大量JSON对象。 太棒了

但是现在我想要html转义我的(任何类型)对象的String值以防止XSS。

那么,我该如何解决这个问题呢? 我首先想到我可以编写一个自定义的Object mapper并将其放入MappkingJacksonHttpMessageConverter中。 但是,writeValue接受一个Object,我不希望这样,我想让它的字段迭代。 我打赌jackson转换器也需要这样做,而不是自己这样做。 所以我想影响那一部分。

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

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

或者,这可能是完全错误的,我需要从一个完全不同的角度来看待它?

有什么想法吗?

哦顺便说一句,自己实现SerializerProvider并创建一个委托给StdSerializerProvider的composit,可能是可能的,但我宁愿不这样做。 (我自己在实例化StdSerializerProvider时遇到了问题)。

任何想法都表示赞赏!

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

  • 如果要引用/转义所有字符串,可以定义自定义字符串序列化程序
  • 您可以先将序列化为JSON树(JsonNode) – ObjectMapper.convertValue(pojo,JsonNode.class) – 修改它,然后序列化为JSON(ObjectMapper.writeValue(intermediateTree))
  • 如果你想要一个灵活的系统,你可以为需要特殊处理的字段添加注释,你可以使用ContextualSerializers的Jackson 1.7function; 自定义序列化程序,可以根据注释重新配置自身。 一开始看起来似乎有些过分,但这可以用来轻松指定自定义修饰符(值为Class的注释属性,表示序列化程序可以调用以修改被序列化的值的对象 – 如转义)

给出了这个答案,而问题是关于validation字符串不包含XSS而不是转义。 如果你想逃避这些话,这个答案对你没有帮助。

如何使用JSR 303 Bean Validationvalidation创建的对象(命令对象)?

例如,通过对“命令对象”的String属性使用非@NotHtml(注释和validation)。

当然,您必须通过自己的方式实现@NotHtml(@NotJavaScript或@NotXSS)注释和validation器。