@@ -195,6 +195,69 @@ void route_stop_filter_prevents_handler_but_global_runs() {
195195 assertEquals (List .of ("g1" , "rStop" ), events );
196196 }
197197
198+ @ Test
199+ void response_phase_can_be_done_with_try_finally_in_filters_reverse_order () {
200+ List <String > events = new ArrayList <>();
201+
202+ HttpFilter f1 = (req , chain ) -> {
203+ events .add ("f1:enter" );
204+ try {
205+ return chain .next (req );
206+ } finally {
207+ events .add ("f1:exit" );
208+ }
209+ };
210+
211+ HttpFilter f2 = (req , chain ) -> {
212+ events .add ("f2:enter" );
213+ try {
214+ return chain .next (req );
215+ } finally {
216+ events .add ("f2:exit" );
217+ }
218+ };
219+
220+ List <FilterRegistration > regs = List .of (
221+ new FilterRegistration (f1 , 10 , null ),
222+ new FilterRegistration (f2 , 20 , null )
223+ );
224+
225+ ConfigurableFilterPipeline pipeline =
226+ new ConfigurableFilterPipeline (regs );
227+
228+ pipeline .execute (new HttpRequest ("GET" , "/home" ), request -> {
229+ events .add ("handler" );
230+ return new HttpResponse (200 , "OK" );
231+ });
232+
233+ assertEquals (
234+ List .of ("f1:enter" , "f2:enter" , "handler" , "f2:exit" , "f1:exit" ),
235+ events
236+ );
237+ }
238+
239+ @ Test
240+ void global_filters_run_before_route_filters_even_if_route_has_lower_order () {
241+ List <String > events = new ArrayList <>();
242+
243+ HttpFilter global100 = new TestFilter ("g100" , events , false );
244+ HttpFilter route0 = new TestFilter ("r0" , events , false );
245+
246+ List <FilterRegistration > regs = List .of (
247+ new FilterRegistration (global100 , 100 , null ),
248+ new FilterRegistration (route0 , 0 , List .of ("/api/*" ))
249+ );
250+
251+ ConfigurableFilterPipeline pipeline =
252+ new ConfigurableFilterPipeline (regs );
253+
254+ pipeline .execute (
255+ new HttpRequest ("GET" , "/api/users" ),
256+ new TestHandler (events )
257+ );
258+
259+ assertEquals (List .of ("g100" , "r0" , "handler" ), events );
260+ }
198261
199262 static class TestFilter implements HttpFilter {
200263
0 commit comments