Filter mappings dont work like servlet mappings in that there is no order of preference for matches. The no1 is recipes/* and that is a match. Thats all it cares about. It is earlier in the DD and hence it is earlier in the filter invocation order.
I really did understand your explanation. So as per what you said, first url-pattern is matched and the filters invoked in the order in which they are configured in the DD. Then it looks for filter-name that matches the url pattern and it invokes them as well in the order in which they are configured in the DD.