Search code examples
servletsgrailsservlet-filtersgrails-controller

Why does a forwarded request pass through filter chain again?


I implemented not usual architecture for Grails app because I made front controller which only forwards requests further (based on some criteria). I also implemented locale resolver as a http servlet request filter. And it turned out that forwarded request passes again through filter chain. So flow looks like this:

  1. A request arrives to grails app
  2. The request passes through my filter
  3. The front controller gets the request and forwards it further
  4. The forwarded request passes again through my filter
  5. A back controller gets the request

In the mean time of writing this post I've come up how to omit the problem (my implementation specific). But still I'm curious why does it happen? Forward should work behind the scene. Java EE spec doesn't say anything about this behaviour (forward javadoc).


Solution

  • In the <filter-mapping> element there is the forward <dispatcher> option. It includes FORWARD. You'd have to list the options you want the filter to be applied to (request, error, include) and leave out forward.