Как указать порядок отображений фильтров на GlassFish? - PullRequest
6 голосов
/ 08 февраля 2011

Я прочитал, что порядок, в котором обрабатываются фильтры, может определяться порядком, в котором они объявлены в web.xml

Но как это сделать без web.xml, используя, например, аннотацию @WebServlet? Я не хочу загромождать свой web.xml

Ответы [ 2 ]

7 голосов
/ 08 февраля 2011

Похоже, что это невозможно для аннотированных фильтров. Спецификация сервлета 3.0 говорит:

Как описано выше, при использовании аннотаций для определения слушателей, сервлетов и фильтров порядок их вызова не указан.

2 голосов
/ 08 февраля 2011

Как отмечает @axtavt, вы не можете этого сделать. Вот почему (я думаю) они разработали это таким образом.

Чтобы указать порядок, аннотациям понадобится дополнительный аргумент, который (каким-то образом) определяет позицию в цепочке; например Заказ'. Есть проблемы с этим:

  1. Если сервлет имеет несколько фильтров, порядок которых определяется параметрами аннотации, то программист / развертыватель должен изучить аннотации для всех классов фильтров, чтобы выяснить, каков фактический порядок.

  2. Данный класс фильтра может теоретически использоваться в нескольких сервлетах, даже в нескольких веб-приложениях. Каждый сервлет или веб-приложение может хотеть, чтобы порядок фильтров был другим. Вы не можете достичь этого просто используя аннотацию к классу фильтра.

  3. Если кому-то необходимо развернуть веб-приложение для изменения порядка фильтрации, ему / ей потребуется изменить исходный код, перекомпилировать и перестроить файл WAR.

Я предполагаю, что дизайнеры рассмотрели эти проблемы и решили, что best место для указания порядка фильтра находится в файле web.xml.

...