Sie können die Filterausführungsreihenfolge in der Tat nicht mithilfe von @WebFilterAnmerkungen definieren. Um die web.xmlVerwendung zu minimieren , ist es jedoch ausreichend, alle Filter mit nur einem zu versehen, filterNamesodass 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.xmlnur 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
orderAttribut einer verschachtelten@WebFilterMappingAnnotation einführen können . Ich frage mich, ob die es der Einfachheit halber nicht getan haben