拦截器获取http的body后HttpServletRequest不可重复读

java 复制代码
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
{
    private final byte[] body;

    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
    {
        super(request);
        request.setCharacterEncoding(Constants.UTF8);
        response.setCharacterEncoding(Constants.UTF8);

        body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8);
    }

    @Override
    public BufferedReader getReader() throws IOException
    {
        return new BufferedReader(new InputStreamReader(getInputStream()));
    }

    @Override
    public ServletInputStream getInputStream() throws IOException
    {
        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
        return new ServletInputStream()
        {
            @Override
            public int read() throws IOException
            {
                return bais.read();
            }

            @Override
            public int available() throws IOException
            {
                return body.length;
            }

            @Override
            public boolean isFinished()
            {
                return false;
            }

            @Override
            public boolean isReady()
            {
                return false;
            }

            @Override
            public void setReadListener(ReadListener readListener)
            {

            }
        };
    }
}

拦截器

相关推荐
爬山算法2 分钟前
Netty(20)如何实现基于Netty的WebSocket服务器?
服务器·websocket·网络协议
zfj3214 分钟前
springmvc websocket 的用法
网络·websocket·网络协议·springmvc
莫叫石榴姐6 分钟前
ast 在 Dify 工作流中解析 JSON 格式数据的深度解析
大数据·网络·安全·json
科技块儿10 分钟前
如何使用IP数据云数据库接入流量监控?
数据库·网络协议·tcp/ip
沉醉不知处15 分钟前
远程连接虚拟机,设置网络后,ip不变
服务器·网络·tcp/ip
路溪非溪28 分钟前
UBUS基本使用总结
linux·网络·arm开发·智能路由器
爱尔兰极光32 分钟前
计算机网络--数据链路层
服务器·网络·计算机网络
全栈工程师修炼指南42 分钟前
Nginx | HTTPS 加密传输:客户端与Nginx服务端 SSL 双向认证实践
运维·网络·nginx·https·ssl
init_236143 分钟前
Hub-Spoke mpls配置
网络
教练、我想打篮球1 小时前
120 同样的 url, header, 参数, 使用 OkHttp 能够成功获取数据, 使用 RestTemplate 报错
http·okhttp·resttemplate·accept