2015-07-13 4 views
1

Я создаю фильтр сервлета, который должен обрабатывать запросы только к определенным путям в моем приложении.Добавить фильтр сервлетов для нескольких путей во встроенном Jetty

Я могу добавить фильтр к моему ServletContextHandler легко, например, так:

FilterHolder holder = new FilterHolder(new MyFilter()); 
holder.setInitParameter("param", "a"); 
contextHandler.addFilter(holder, "/x", EnumSet.allOf(DispatcherType.class)); 

Но как я могу добавить больше путей к этому фильтру? Я хочу, чтобы он обрабатывал запросы к /y.

Я не могу найти простой и правильный способ сделать это. Используя web.xml, я бы просто определил несколько тегов <url-pattern> под отображением фильтра.

Использование Jetty версии 9.3.0.v20150612.

ответ

1

Просто добавьте фильтр (через его держатель) несколько раз.

FilterHolder holder = new FilterHolder(new MyFilter()); 
holder.setName("my-filter"); 
holder.setInitParameter("param", "a"); 
contextHandler.addFilter(holder, "/x", EnumSet.allOf(DispatcherType.class)); 
contextHandler.addFilter(holder, "*.y", EnumSet.allOf(DispatcherType.class)); 
contextHandler.addFilter(holder, "/z/*", EnumSet.allOf(DispatcherType.class)); 

Альтернативный метод (повторное использование держателя генерируется из AddFilter)

Enum<DispatcherType> dispatchers = EnumSet.allOf(DispatcherType.class); 
FilterHolder holder = contextHandler.addFilter(MyFilter.class, "/x", dispatchers); 
holder.setInitParameter("param", "a"); 
contextHandler.addFilter(holder, "*.y", dispatchers); 
contextHandler.addFilter(holder, "/z/*", dispatchers); 
+0

Я попробовал, но метод инициализации фильтра был вызван несколько раз, что кажется неправильным. – elanh

+0

Да, вы увидите несколько вызовов Filter.init(). но в каждом вызове есть те же «FilterConfig.getName()» и «FilterConfig.getServletContext()». –

+0

Есть ли способ сделать это прилично? Потому что у меня около 50 конечных точек, которые в ней нуждаются, и около 5, у кого нет ... Не существует ли белый механизм вместо механизма черного списка? –

Смежные вопросы