Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
36514 amit 1
package com.spice.profitmandi.web.filter;
2
 
3
import javax.servlet.*;
4
import javax.servlet.http.HttpServletRequest;
5
import javax.servlet.http.HttpServletRequestWrapper;
6
import java.io.*;
7
 
8
public class RequestCachingFilter implements Filter {
9
 
10
    @Override
11
    public void init(FilterConfig filterConfig) throws ServletException {}
12
 
13
    @Override
14
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
15
            throws IOException, ServletException {
16
        HttpServletRequest httpRequest = (HttpServletRequest) request;
17
        if ("POST".equalsIgnoreCase(httpRequest.getMethod())
18
                && !isMultipart(httpRequest)
19
                && !isFormEncoded(httpRequest)) {
20
            chain.doFilter(new CachedBodyRequest(httpRequest), response);
21
        } else {
22
            chain.doFilter(request, response);
23
        }
24
    }
25
 
26
    @Override
27
    public void destroy() {}
28
 
29
    private boolean isMultipart(HttpServletRequest request) {
30
        String contentType = request.getContentType();
31
        return contentType != null && contentType.toLowerCase().startsWith("multipart/");
32
    }
33
 
34
    private boolean isFormEncoded(HttpServletRequest request) {
35
        String contentType = request.getContentType();
36
        return contentType != null && contentType.toLowerCase().startsWith("application/x-www-form-urlencoded");
37
    }
38
 
39
    public static class CachedBodyRequest extends HttpServletRequestWrapper {
40
        private final byte[] body;
41
 
42
        public CachedBodyRequest(HttpServletRequest request) throws IOException {
43
            super(request);
44
            InputStream is = request.getInputStream();
45
            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
46
            byte[] buf = new byte[1024];
47
            int len;
48
            while ((len = is.read(buf)) != -1) {
49
                baos.write(buf, 0, len);
50
            }
51
            this.body = baos.toByteArray();
52
        }
53
 
54
        @Override
55
        public ServletInputStream getInputStream() {
56
            ByteArrayInputStream bais = new ByteArrayInputStream(body);
57
            return new ServletInputStream() {
58
                @Override public int read() { return bais.read(); }
59
                @Override public boolean isFinished() { return bais.available() == 0; }
60
                @Override public boolean isReady() { return true; }
61
                @Override public void setReadListener(ReadListener listener) {}
62
            };
63
        }
64
 
65
        @Override
66
        public BufferedReader getReader() {
67
            return new BufferedReader(new InputStreamReader(getInputStream()));
68
        }
69
 
70
        public byte[] getCachedBody() {
71
            return body;
72
        }
73
    }
74
}