ForwardedHeaderFilter captures the requestUri on initial request (e.g. /foo). That request URI can be altered due to a server-side forward - for example:
When the request is re-dispatched, code calling HttpServletRequest.getRequestURI() receives the old value (e.g. /foo) instead of the new value (e.g. /bar). Even if the filter is registered with DispatcherType.FORWARD, the issue remains that the filter implements OncePerRequestFilter.