Sie können die Filterausführungsreihenfolge in der Tat nicht mithilfe von @WebFilter
Anmerkungen definieren. Um die web.xml
Verwendung zu minimieren , ist es jedoch ausreichend, alle Filter mit nur einem zu versehen, filterName
sodass Sie nicht die <filter>
Definition, sondern nur eine <filter-mapping>
Definition in der gewünschten Reihenfolge benötigen .
Beispielsweise,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
mit in web.xml
nur diesem:
<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>
Wenn Sie das URL-Muster beibehalten möchten @WebFilter
, können Sie dies einfach tun:
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
aber Sie sollten immer noch die halten <url-pattern>
in web.xml
, weil es laut XSD erforderlich ist, obwohl es leer sein:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Unabhängig vom Ansatz wird dies alles in Tomcat bis zur Version 7.0.28 fehlschlagen, da es bei Vorhandensein von <filter-mapping>
ohne erstickt <filter>
. Siehe auch Bei Verwendung von Tomcat funktioniert @WebFilter nicht mit <filter-mapping> in web.xml
order
Attribut einer verschachtelten@WebFilterMapping
Annotation einführen können . Ich frage mich, ob die es der Einfachheit halber nicht getan haben