Anda memang tidak dapat menentukan urutan eksekusi filter menggunakan @WebFilter
anotasi. Namun, untuk meminimalkan web.xml
penggunaan, itu cukup untuk membubuhi keterangan semua filter hanya dengan filterName
sehingga Anda tidak memerlukan <filter>
definisi, tetapi hanya <filter-mapping>
definisi dalam urutan yang diinginkan.
Sebagai contoh,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
dengan web.xml
hanya ini:
<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>
Jika Anda ingin mempertahankan pola URL @WebFilter
, maka Anda dapat melakukannya,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
tapi Anda masih harus menjaga <url-pattern>
di web.xml
, karena itu diperlukan sesuai XSD, meskipun bisa kosong:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Terlepas dari pendekatannya, ini semua akan gagal di Tomcat sampai versi 7.0.28 karena tersedak oleh kehadiran <filter-mapping>
tanpa <filter>
. Lihat juga Menggunakan Tomcat, @WebFilter tidak berfungsi dengan <filter-mapping> di dalam web.xml
order
atribut@WebFilterMapping
anotasi bersarang . Saya bertanya-tanya apakah mereka tidak melakukannya untuk kesederhanaan