All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jn.agileway.web.servlet.HttpServletRequestStreamWrapper Maven / Gradle / Ivy

package com.jn.agileway.web.servlet;

import com.jn.langx.util.io.Charsets;
import com.jn.langx.util.io.IOs;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;

public class HttpServletRequestStreamWrapper extends HttpServletRequestWrapper {

    public HttpServletRequestStreamWrapper(HttpServletRequest request) {
        super(request);
        try {
            this.getInputStream();
        } catch (Throwable ex) {
            // ignore it
        }
    }

    private byte[] requestBodyBackup;
    private ByteBuffer requestBody;// for input stream

    @Override
    public ServletInputStream getInputStream() throws IOException {
        ServletInputStream inputStream = super.getInputStream();
        if (requestBody == null) {
            int length = this.getContentLength();
            if (length == 0) {
                requestBodyBackup = new byte[0];
            } else {
                requestBodyBackup = IOs.toByteArray(inputStream);
            }
            requestBody = ByteBuffer.wrap(requestBodyBackup);
            requestBody.rewind();
        }

        return new ServletInputStream() {
            @Override
            public int read() throws IOException {
                if (requestBody == null || !requestBody.hasRemaining()) {
                    return -1;
                }
                return IOs.filterInputStreamRead(requestBody.get());
            }
        };
    }

    public byte[] getRequestBody() {
        return requestBodyBackup;
    }

    @Override
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(getInputStream(), Charsets.UTF_8));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy