Spring JSON污染了JacksonMessageConverter的响应

时间:2012-03-15 19:49:21

标签: ajax spring spring-mvc jackson taint

我的Spring应用程序中有一个JacksonMessageConverter用于返回JSON响应。 但是在返回JSON之前,我想对Ajax Security - Preventing JSON hijacking中给出的JSON进行污染。使用消息转换器时是否可以这样做?

更新

我正在寻找类似于此spring prefixjson with responsebody的解决方案,但我已经正确设置了配置。 PFB

<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="prefixJson" value="true" />
    <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jacksonMessageConverter"/>
        </list>
    </property>
</bean>

但返回的JSON仍然没有“&amp;&amp; {}”前缀。

注意:我想为JSON使用不同的前缀,如Ajax Security - Preventing JSON hijacking中所述 但即使杰克逊提供的默认支持似乎也不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

更简单的方法是扩展MappingJacksonHttpMessageConverter并覆盖writeInternal方法来执行自定义前缀等操作

答案 1 :(得分:1)

尝试调试MappingJacksonHttpMessageConverter,看看prefixJson是否等于 true 。 如果没有,那么你的豆子不会被注射。 如果是,请查看MappingJacksonHttpMessageConverter类的writeInternal()方法。 IT显然可以满足您的需求:

try {
        if (this.prefixJson) {
            jsonGenerator.writeRaw("{} && ");
        }
        this.objectMapper.writeValue(jsonGenerator, o);
    }

如果您想添加自定义前缀,则需要覆盖writeInternal()并在那里执行。