If you wanted the Filter to write back the response, you shouldnt have the doFilter() call on the FilterChain. doFilter() would invoke the next entity in the chain (which may be another Filter or a
Servlet or a
Jsp)
Having said that, I would recommend that you take a step back and have a careful look at your design. Filter blocking requests are a rarity. And in most cases, it would be conditional - an example would be to check for a certain attribute in session or the session itself (this can be done easily enough in the Controller too). Filters generally augment request and response handling (eg zipping up the response, adding a request parameter etc).
And finally the purpose of a ResponseWrapper is to prevent the Servlets or Jsp from writing to the response directly. Instead the Filter wraps the response object adding it's own custom OutputStream and then passes the request along. Now a Servlet or a Jsp would write to the Filter's output stream and when the Filter receives the response on its way back, it can extract the contents, make necessary changes (say zip it up) and then send the output to the browser.
Does that help?
ram.