如果我想使用MappingJacksonConverter使用Springs Dispatcher Servlet来签署传出响应,那么可能的解决方案是什么。
我的目标是在标题中添加md5的正文内容,以验证响应。
我在阅读回复后无法访问标题。
有什么建议?
答案 0 :(得分:0)
以您希望的方式对其进行签名的解决方案是执行以下操作:
创建一个servlet Filter
,它将HttpServletResponse
对象包装在写入临时ByteArrayOutputStream
的实现中,并且不刷新标头/内容。当Filter
从doFilter
返回时,您从ByteArrayOutputStream
获取bytes,提供它们以计算MD5哈希值,添加响应头,然后刷新响应。< / p>
答案 1 :(得分:0)
您可以编写自己的Mapping Conventer类。在我的项目中,我在类路径中使用MappingJackson2HttpMessageConverter
和jackson2
。我将举例说明如何在修改响应消息时添加标题。
首先,范围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)