Java 如何使用Jackson生成器对html值进行转义
我们使用Spring及其内置的MappingJacksonHttpMessageConverter生成许多JSON对象。太好了 但是现在我想html转义我的(任何类型的)对象的字符串值,以防止XSS 那么,我该如何处理这个问题呢?我首先想到可以编写一个自定义对象映射器,并将其放入MappkingJacksonHttpMessageConverter。但是,writeValue接受一个对象,我不希望这样,我希望它的字段可以迭代。我打赌jackson转换器也需要这样做,而不是自己做。所以我想影响这一部分 现在我得到了一个SerializerProvider接口。ObjectMapper正在调用标准实现(StdSerializerProvider)。因此,我想覆盖/影响负责设置值的方法 可能吗?据我所知,很难扩展。我无法重写StdSerializerProvider以重写ObjectMapper使用的方法。也许我需要重写另一个 或者,也许这是完全错误的,我需要从一个完全不同的角度来看待它 有什么想法吗 哦,顺便说一句,我自己实现SerializerProvider并创建一个委托给StdSerializerProvider的composit是可能的,但我不想这样做。(我自己在实例化StdSerializerProvider时已经遇到了问题) 任何想法都很感激 给出了这个答案,而问题是关于验证字符串是否不包含xs以及是否转义。如果你想摆脱束缚,这个答案对你没有帮助 如何使用验证创建的对象(命令对象) 例如,对“命令对象”的字符串属性使用not@NotHtml(注释和验证)Java 如何使用Jackson生成器对html值进行转义,java,json,spring,spring-mvc,jackson,Java,Json,Spring,Spring Mvc,Jackson,我们使用Spring及其内置的MappingJacksonHttpMessageConverter生成许多JSON对象。太好了 但是现在我想html转义我的(任何类型的)对象的字符串值,以防止XSS 那么,我该如何处理这个问题呢?我首先想到可以编写一个自定义对象映射器,并将其放入MappkingJacksonHttpMessageConverter。但是,writeValue接受一个对象,我不希望这样,我希望它的字段可以迭代。我打赌jackson转换器也需要这样做,而不是自己做。所以我想影响这一
(当然,您必须自行实现@NotHtml(@NotJavaScript或@NotXSS)注释和验证程序。)有多种方法,具体取决于您如何识别想要转义的内容。一些想法:
- 如果要引用/转义所有字符串,可以定义自定义字符串序列化程序
- 您可以首先序列化为JSON树(JsonNode)——ObjectMapper.convertValue(pojo,JsonNode.class)——修改它,然后序列化为JSON(ObjectMapper.writeValue(intermediateTree))
- 如果您想要一个灵活的系统,可以为需要特殊处理的字段添加注释,可以使用ContextualSerializer的Jackson 1.7特性;自定义序列化程序,可根据注释重新配置自身。乍一看似乎有些过分,但这可以用来轻松地指定自定义修饰符(值为Class的注释属性,它指示序列化程序可以调用的对象,以修改正在序列化的值,如escape)