Как определить порядок выполнения фильтра сервлетов с помощью аннотаций в WAR
Если мы определяем конкретные фильтры сервлетов webapp в собственном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 не работает с
спецификация сервлета 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.