RathanaKumar
RathanaKumar

Reputation: 375

How to modify and set the post request body using servlet filter

I want to do some encryption/decryption for both JSON request and response.For that i choosed servlet filter.But,i dont know how to modify and set the json request body. Any solutions are highly appreciable.

Upvotes: 2

Views: 2612

Answers (1)

Maurice Perry
Maurice Perry

Reputation: 9651

You must use wrappers:

private static class MyRequestWrapper extends HttpServletRequestWrapper {
    private ServletInputStream input;

    public MyRequestWrapper(ServletRequest request) {
        super((HttpServletRequest)request);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        if (input == null) {
            input = new InputStreamDecoder(super.getInputStream());
        }
        return input;
    }
}

private static class MyResponseWrapper extends HttpServletResponseWrapper {
    private ServletOutputStream output;

    public MyResponseWrapper(ServletResponse response) {
        super((HttpServletResponse)response);
    }

    @Override
    public ServletOutputStream getOutputStream() throws IOException {
        if (output == null) {
            output = new OutputStreamEncoder(super.getOutputStream());
        }
        return output;
    }

    public void close() throws IOException {
        if (output != null) {
            output.flush();
        }
    }
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    MyRequestWrapper req = new MyRequestWrapper(request);
    MyResponseWrapper res = new MyResponseWrapper(response);
    chain.doFilter(req, res);
    res.close();
}

Upvotes: 1

Related Questions