0

如果我想使用 Springs Dispatcher Servlet 和 MappingJacksonConverter 签署传出响应,可能的解决方案是什么。

我的目标是在标题中添加正文内容的 md5,以验证响应。

通过阅读响应后我无法访问标题。

有什么建议?

4

2 回答 2

0

以您想要的方式对其进行签名的解决方案是执行以下操作:

创建一个 servlet Filter,将对象包装HttpServletResponse在一个实现中,该实现写入临时ByteArrayOutputStream文件并且不刷新标头/内容。当从 中Filter返回时doFilter,您从 中获取字节,输入ByteArrayOutputStream它们以计算 MD5 哈希,添加响应标头,然后刷新响应。

于 2013-08-16T17:34:57.753 回答
0

您可以编写自己的 Mapping Conventer 类。在我的项目中,我在类路径中使用MappingJackson2HttpMessageConverterwith jackson2。我将举一个例子来展示如何在修道院响应消息时添加标题。

一、extentsMappingJackson2HttpMessageConverter

public class MyMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
    @Override
    protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        outputMessage.getHeaders().add("code", DigestUtils.md5Hex(object.toString()));
        // add header before write body content
        super.writeInternal(object, outputMessage); // convent whatever you can

    }
}

然后将你自己的 Conventer bean 类添加到 Spring-mvc 配置文件中

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="com.xxx.utils.MyMappingJackson2HttpMessageConverter">
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

这是上面的响应标头

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
code: 84fd2e9b2adc2f5be0b53a3ff7f1492b
Transfer-Encoding: chunked
Server: Jetty(7.6.8.v20121106)
于 2013-08-17T18:17:30.357 回答