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:
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).
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.