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

com.alterioncorp.requestlogger.CachedPayloadRequest Maven / Gradle / Ivy

package com.alterioncorp.requestlogger;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.io.IOUtils;

public class CachedPayloadRequest extends HttpServletRequestWrapper {

	static class ServletInputStreamImpl extends ServletInputStream {
		
		private InputStream stream;
	
		ServletInputStreamImpl(InputStream stream) {
			super();
			this.stream = stream;
		}

		@Override
		public int read() throws IOException {
			return stream.read();
		}
	}
	
	private byte[] rawData;
	private ServletInputStreamImpl servletStream;
	
	public CachedPayloadRequest(HttpServletRequest request) {
		super(request);
	}
	
	@Override
	public ServletInputStream getInputStream() throws IOException {
		if (rawData == null) {
			rawData = IOUtils.toByteArray(this.getRequest().getInputStream());
			this.resetInputStream();
		}
		return servletStream;
	}
	
	@Override
	public BufferedReader getReader() throws IOException {
		Charset charset = this.getCharacterEncoding() == null ? Charset.defaultCharset() : Charset.forName(this.getCharacterEncoding());
		InputStream inputStream = this.getInputStream();
		return inputStream == null ? null : new BufferedReader(new InputStreamReader(inputStream, charset));
	}
	
	public void resetInputStream() {
		if (rawData != null) {
			servletStream = new ServletInputStreamImpl(new ByteArrayInputStream(rawData));
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy