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

            }
        };
    }
}

拦截器

相关推荐
@西瓜@11 分钟前
(网络)应用层协议-HTTPS
网络·网络协议·https
海尔辛16 分钟前
学习黑客5 分钟读懂什么是 CVE?
网络·学习·安全
c语言中的小小白1 小时前
【Linux网络】————HTTP协议详解
网络·网络协议·http
achene_ql2 小时前
WebRTC:去中心化网络P2P框架解析
网络·去中心化·webrtc·p2p
s_little_monster2 小时前
【Linux】socket网络编程之TCP
linux·运维·网络·笔记·学习·tcp/ip·学习方法
煤灰2423 小时前
Linux上的网络编程-初探
linux·网络
啊QQQQQ3 小时前
网络IP分片
网络·网络协议·tcp/ip
✿ ༺ ོIT技术༻3 小时前
Linux:深入理解网络层
运维·服务器·网络
程序员与背包客_CoderZ3 小时前
自动驾驶技术栈——DoIP通信协议
网络协议·计算机网络·车载系统·自动驾驶
网络空间小黑5 小时前
WEB渗透测试----信息收集
服务器·前端·网络·安全·web安全·网络安全