spring 解决过滤器、拦截器HttpServletRequest.getReader()只能使用一次的问题

问题描述:

背景:最近项目接口都流行json来json去,也就是不通过http协议的parameters(get、post等)获取数据,而是直接把json串写到http entity里面,用流的方式来获取整个json数据。

如果采用了java的spring框架,在过滤器和拦截器中getReader了http流之后,这个流就不存在了(有兴趣的话了解下java的字节流机制),在action中,由于http流已经不复存在,所以业务代码就无法获取到json参数了。

解决方案:

解决方案呢,就是把HttpServletRequest的流存成byte数组,然后用一层继承自HttpServletRequest的wrapper包裹起来,再将这个wrapper对象往下传递。

注意:该方案只支持过滤器,拦截器目前没有好的办法!

 

ResettableStreamHttpServletRequest.java

 

调用方法:

在doFilterInternal方法中

 

声明:如未作说明,则本文为 渣滓洞【解旻的博客】 原创。转载务必注明出处
注意:转载须保留全文,如需修改请联系作者

本文永久地址:http://xieminis.me/?p=364