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

            }
        };
    }
}

拦截器

相关推荐
游戏开发爱好者830 分钟前
iOS15描述文件在哪下载?iOS15测试版描述文件下载与升级教程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
学习溢出1 小时前
【网络安全】OWASP 十大漏洞
网络·安全·web安全·网络安全
hgdlip1 小时前
手机使用移动网络ip地址是固定的吗?如何查看
网络·tcp/ip·智能手机
sky.fly1 小时前
多路由器通过RIP动态路由实现通讯(单臂路由)
网络·windows·智能路由器
快解析1 小时前
内网穿透快解析免费开放硬件集成SDK
网络·智能路由器
GalaxyPokemon1 小时前
Muduo网络库实现 [十六] - HttpServer模块
linux·运维·服务器·网络
浩浩测试一下3 小时前
信息收集之hack用的网络空间搜索引擎
android·网络·安全·web安全·搜索引擎·网络安全·安全架构
眠りたいです3 小时前
Linux-网络基础
linux·运维·服务器·网络·c++·进程间通信
火绒终端安全管理系统3 小时前
教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
网络·安全·web安全·网络安全·火绒安全