拦截器获取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)
            {

            }
        };
    }
}

拦截器

相关推荐
apple_ttt1 小时前
融合:迈向 “一台计算机” 的终极架构
网络·架构·cxl·数据中心网络
祁弋2 小时前
UDP的理解
网络·网络协议·udp
独行soc2 小时前
2025年渗透测试面试题总结-98(题目+回答)
网络·安全·web安全·adb·面试·渗透测试·安全狮
十二月将至4 小时前
python读取文件的常用操作
网络·python
Miki Makimura5 小时前
基于网络io的多线程TCP服务器
网络·c++·学习
yenggd5 小时前
QoS之流量整形配置方法
网络·数据库·华为
key065 小时前
《数据出境安全评估办法》企业应对策略
网络·人工智能·安全
AORO20256 小时前
遨游科普:什么是对讲机?没有网络的山区对讲机可以用吗?
网络·5g·安全·信息与通信
fei_sun6 小时前
【复习】计网强化第一章
运维·服务器·网络
额呃呃8 小时前
项目中HTTP协议处理部分(续)
网络·网络协议·http