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

            }
        };
    }
}

拦截器

相关推荐
qq_三哥啊20 小时前
【mitmproxy】通过 mitmproxy 的本地捕获代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·系统安全·代理模式
IT摆渡者20 小时前
linux 系统安全检查
运维·网络·经验分享·笔记
学习3人组20 小时前
OEE(设备综合效率)的标准定义、公式、损失分类、以及在工位触屏/MES里怎么采集和统计
大数据·网络·数据库
时空自由民.21 小时前
蓝牙协议栈介绍
linux·网络·单片机
ggabb21 小时前
月壤之下:人类驻月先行者
网络
b55t4ck1 天前
FortiWeb CVE-2025-64446漏洞深入复现分析
网络·安全·iot
wanhengidc1 天前
可持续性 云手机运行
运维·服务器·网络·安全·智能手机
YOU OU1 天前
网络编程(Java)
网络
mifengxing1 天前
操作系统(四)
linux·服务器·网络·操作系统
时空系1 天前
第4篇:如果...那么——让程序做选择 Rust中文编程
开发语言·网络·rust