JSON 前缀有什么用?

Yan*_*fan 3 java spring json spring-mvc

我知道这是一个愚蠢的问题,但我没有找到谷歌预期的答案。Spring MVC 4.3的新功能之一是支持配置JSON前缀

<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="jsonPrefix" value=")]}',\n" />
    </bean>
</mvc:message-converters>
Run Code Online (Sandbox Code Playgroud)

因此 JSON 输入/输出可能如下所示:

)]}',\n"{\"userName\":\"ABC\",\"emailId\":\"ABC@gmail.com\"}"
Run Code Online (Sandbox Code Playgroud)

我知道这是出于安全目的。但具体是关于什么呢?

dim*_*sli 5

如果您查看Spring JavaDoc 中添加的另一个方法 setPrefixJson(boolean),您将了解其背后的原因:

指示此视图输出的 JSON 是否应以“)]}',”为前缀。默认为 false。

以这种方式为 JSON 字符串添加前缀有助于防止 JSON 劫持。该前缀使字符串作为脚本在语法上无效,因此无法被劫持。在将字符串解析为 JSON 之前,应删除此前缀。