Blame | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import java.io.*;public class RequestCachingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest httpRequest = (HttpServletRequest) request;if ("POST".equalsIgnoreCase(httpRequest.getMethod())&& !isMultipart(httpRequest)&& !isFormEncoded(httpRequest)) {chain.doFilter(new CachedBodyRequest(httpRequest), response);} else {chain.doFilter(request, response);}}@Overridepublic void destroy() {}private boolean isMultipart(HttpServletRequest request) {String contentType = request.getContentType();return contentType != null && contentType.toLowerCase().startsWith("multipart/");}private boolean isFormEncoded(HttpServletRequest request) {String contentType = request.getContentType();return contentType != null && contentType.toLowerCase().startsWith("application/x-www-form-urlencoded");}public static class CachedBodyRequest extends HttpServletRequestWrapper {private final byte[] body;public CachedBodyRequest(HttpServletRequest request) throws IOException {super(request);InputStream is = request.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);byte[] buf = new byte[1024];int len;while ((len = is.read(buf)) != -1) {baos.write(buf, 0, len);}this.body = baos.toByteArray();}@Overridepublic ServletInputStream getInputStream() {ByteArrayInputStream bais = new ByteArrayInputStream(body);return new ServletInputStream() {@Override public int read() { return bais.read(); }@Override public boolean isFinished() { return bais.available() == 0; }@Override public boolean isReady() { return true; }@Override public void setReadListener(ReadListener listener) {}};}@Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(getInputStream()));}public byte[] getCachedBody() {return body;}}}