The HttpServletRequestWrapper extends HttpServletRequest which means it is an instance of HttpServletRequest.
In a filter, take the ServletRequest passed to you by the container. Pass it to the constructor of an HttpServletRequestWrapper object, (you'll have to down cast it to HttpServletRequest).
Pull all of the original headers from the wrapped servletRequest using super.getHeaders and super.getHeader.... etc.
Load all of the headers into an hashtable.
Override the getHeaders, getHeaderNames,..etc returning the values from your hashtable instead of the values in the original (wrapped) request object.
Pass the HttpServletWrapper object to the doChain method instead of the request that was originally passed to you.
It sounds like a lot of work but it's not. The HttpServletWrapper class provided by the servlet spec already did most of the grunt work for you.
If you want a running example of the wrapper
pattern, look at
http://simple.souther.us/capture.war. This example is actually wrapping the response object, not the request, but it should give you a basic idea.