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

            }
        };
    }
}

拦截器

相关推荐
w6100104667 分钟前
CKA-2026-Service
linux·服务器·网络·service·cka
GTgiantech12 分钟前
灵活拓展网络边界:电口光模块的智慧选型与部署指南
网络
汤愈韬15 分钟前
网络安全之网络基础知识_2
网络协议·安全·web安全
测试专家24 分钟前
天脉3操作系统
网络
JS_SWKJ34 分钟前
网闸升级、备份、恢复标准化操作全指南
网络
王燕龙(大卫)1 小时前
tcp报文什么时候会真正发送
服务器·网络·tcp/ip
勿忘,瞬间1 小时前
网络编程套接字
运维·服务器·网络
@insist1231 小时前
网络工程师-网络安全基础体系:软考核心考点与合规框架全解析
网络·网络工程师·软考·软件水平考试
zhanghongbin011 小时前
本地持久化:网络故障数据保护
服务器·网络·php
刘~浪地球1 小时前
数据库与缓存--分库分表实战指南
网络·数据库·缓存