DispatcherServlet签署传出响应

时间:2013-08-16 16:07:24

标签: spring servlets

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

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

我在阅读回复后无法访问标题。

有什么建议?

2 个答案:

答案 0 :(得分:0)

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

创建一个servlet Filter,它将HttpServletResponse对象包装在写入临时ByteArrayOutputStream的实现中,并且不刷新标头/内容。当FilterdoFilter返回时,您从ByteArrayOutputStream获取bytes,提供它们以计算MD5哈希值,添加响应头,然后刷新响应。< / p>

答案 1 :(得分:0)

您可以编写自己的Mapping Conventer类。在我的项目中,我在类路径中使用MappingJackson2HttpMessageConverterjackson2。我将举例说明如何在修改响应消息时添加标题。

首先,范围MappingJackson2HttpMessageConverter

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)