I have a filter that authenticates / resolves REST calls. These filters need to access the request parameters, so for this I wrote my own HTTPServletRequestWrapper.
import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class WrapperRequest extends HttpServletRequestWrapper { private Map<String, String[]> requestParams = null; public WrapperRequest(final ServletRequest request) { super((HttpServletRequest) request); } @Override public String getParameter(final String name) { if (getParameterMap().get(name) != null) { return getParameterMap().get(name)[0]; } else { getParameterMap().get(name)[0] = super.getParameter(name); requestParams.put(name, getParameterMap().get(name)); return requestParams.get(name)[0]; } } @Override public Map<String, String[]> getParameterMap() { if (requestParams == null) { requestParams = new HashMap<String, String[]>(); requestParams.putAll(super.getParameterMap()); } return Collections.unmodifiableMap(requestParams); } @Override public Enumeration<String> getParameterNames() { return Collections.enumeration(getParameterMap().keySet()); } @Override public String[] getParameterValues(final String name) { return getParameterMap().get(name); } }
In my doFilter filter method:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final WrapperRequest wrappedRequest = new WrapperRequest(request); Map<String, String[]> paramMap = wrappedRequest.getParameterMap(); chain.doFilter(wrappedRequest, response);
But I get a warning below
WARNING: a servlet request in a URI contains the form of parameters in the request body, but the request body was destroyed by the servlet or servlet filter, access to request parameters. Only resource methods using @FormParam will work as expected. Resource methods that consume the request body in other ways will not work as expected.
I am deploying this to Tomcat. Help!
source share