Как определить порядок выполнения фильтра сервлетов с помощью аннотаций в WAR
если мы определяем веб-приложения конкретных фильтров сервлетов в собственной войне web.xml, то порядок выполнения фильтров будет таким же, как порядок, в котором они определены в web.xml.
но, если мы определим эти фильтры с помощью @WebFilter аннотация, каков порядок выполнения фильтров, и как мы можем определить порядок выполнения?
3 ответов:
вы действительно не можете определить порядок выполнения фильтра с помощью
@WebFilterПримечание. Однако, чтобы свести к минимумуweb.xmlиспользование, достаточно аннотировать все фильтры только сfilterNameтак что вам не нужно<filter>определение, но только<filter-mapping>определения в нужном порядке.например,
@WebFilter(filterName="filter1") public class Filter1 implements Filter {} @WebFilter(filterName="filter2") public class Filter2 implements Filter {}С in
web.xmlвсего:<filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/url1/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>filter2</filter-name> <url-pattern>/url2/*</url-pattern> </filter-mapping>если вы хотите сохранить шаблон URL в
@WebFilter, тогда вы можете просто сделай так,@WebFilter(filterName="filter1", urlPatterns="/url1/*") public class Filter1 implements Filter {} @WebFilter(filterName="filter2", urlPatterns="/url2/*") public class Filter2 implements Filter {}но вы все равно должны держать
<url-pattern>наweb.xml, потому что это требуется в соответствии с XSD, хотя он может быть пустым:<filter-mapping> <filter-name>filter1</filter-name> <url-pattern /> </filter-mapping> <filter-mapping> <filter-name>filter2</filter-name> <url-pattern /> </filter-mapping>независимо от подхода, это все не удастся в Tomcat до версии 7.0.28, потому что он задыхается от присутствия
<filter-mapping>без<filter>. Смотрите также используя Tomcat, @WebFilter не работает свнутри web.xml
спецификация сервлета 3.0, похоже, не дает подсказки о том, как контейнер должен заказывать фильтры, которые были объявлены через аннотации. Понятно, как насчет того, чтобы заказать фильтры через их объявление в интернете.xml-файл, однако.
будьте в безопасности. Использовать интернет.фильтры порядка файлов xml, которые имеют взаимозависимости. Постарайтесь сделать ваши фильтры полностью независимыми, чтобы свести к минимуму необходимость использования интернета.XML-файл.
к сожалению, вы должны прибегнуть к немного XML еще.
Регистрация спец раздел 8.2 и добавить биты, необходимые для вашего веб-сайта.xml или web-фрагмент.xml, в зависимости от вашей упаковки. Обратите внимание, что это
в интернете.xml вы можете фильтровать и прослушиватели по имени:
<absolute-ordering> <name>FirstFilter</name> <name>NextFilter</name> </absolute-ordering>в веб-фрагмент.xml вы можете фильтровать и прослушивать до или после других, как указано по имени или в общем случае с тегом "другие". Например, чтобы попытаться заказать ваш JAR во-первых, используйте следующее в веб-фрагменте.xml
<order> <before> <others/> </before> </order>обратите внимание, что веб-фрагмент.xml-заказы для JAR, а также фильтры или прослушиватели в пределах одного JAR произвольно упорядочиваются, если это не указано в веб-приложении.XML.
Comments