wrap route callback with filter