0

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

更新

我正在寻找一个类似于这个带有 responsebody 的 spring prefixjson的解决方案,但我已经正确设置了配置。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 仍然没有以“&&{}”为前缀。

注意:我想为 JSON 使用不同的前缀,如Ajax 安全性 - 防止 JSON 劫持 中所述,但即使是 Jackson 中提供的默认支持似乎也不起作用。有任何想法吗?

4

2 回答 2

1

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

于 2012-03-16T16:01:04.447 回答
1

尝试调试 MappingJacksonHttpMessageConverter 以查看是否prefixJson等于true。如果没有,那么你的 bean 没有正确注入。如果是,请查看writeInternal()MappingJacksonHttpMessageConverter 类的方法。IT 清楚地满足您的需求:

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

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

于 2012-03-16T16:22:09.097 回答