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

            }
        };
    }
}

拦截器

相关推荐
试剂界的爱马仕7 分钟前
软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
网络·人工智能·科技·机器学习·ci/cd·ai写作
一只小松许️10 分钟前
UDP包大小与丢包率的关系:原理分析与优化实践
网络协议·udp·智能路由器
gadiaola11 分钟前
【计算机网络】第3章:传输层—面向连接的传输:TCP
网络·网络协议·tcp/ip·计算机网络
安全系统学习3 小时前
【网络安全】漏洞分析:阿帕奇漏洞学习
java·网络·安全·web安全·系统安全
王火火(DDoS CC防护)3 小时前
UDP与TCP的区别是什么?
网络协议·tcp/ip·udp
小邓儿◑.◑3 小时前
C++初阶 | 模板
网络·c++·windows
链上Sniper3 小时前
Python 区块链开发实战:从零到一构建智能合约
开发语言·网络·python·架构·区块链·php·智能合约
不做菜鸟的网工3 小时前
Ubuntu部署Wireguard笔记
网络协议
领世达检测V133529092493 小时前
「EN 18031」访问控制机制(ACM - 1):智能路由器的安全守卫
网络·智能路由器
SZ1701102313 小时前
默认网关 -- 负责转发数据包到其他网络的设备(通常是路由器)
网络·智能路由器