Bạn thực sự không thể xác định thứ tự thực hiện bộ lọc bằng cách sử dụng chú thích @WebFilter
. Tuy nhiên, để giảm thiểu việc sử dụng web.xml
, bạn chỉ cần chú thích tất cả các bộ lọc chỉ với một filterName
để bạn không cần định nghĩa <filter>
, nhưng chỉ cần định nghĩa <filter-mapping>
theo thứ tự mong muốn.
Ví dụ,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
với trong web.xml
chỉ này:
<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>
Nếu bạn muốn giữ các mẫu URL trong @WebFilter
, sau đó bạn có thể chỉ cần làm như vậy,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
nhưng bạn vẫn nên giữ <url-pattern>
trong web.xml
, bởi vì nó yêu cầu theo XSD, mặc dù nó có thể để trống:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Bất kể phương pháp này, tất cả điều này sẽ thất bại trong Tomcat cho đến khi phiên bản 7.0.28 vì nó cuộn cảm trên mặt của <filter-mapping>
mà không <filter>
. Xem thêm Using Tomcat, @WebFilter doesn't work with <filter-mapping> inside web.xml
họ có thể đã giới thiệu thuộc tính 'order' của chú thích' @ WebFilterMapping' lồng nhau. Tôi tự hỏi liệu không làm điều đó cho sự đơn giản – Bozho
@ Bozho: Điều đó sẽ không đủ cụ thể. Điều gì xảy ra nếu webapp của bạn đi kèm với thư viện của bên thứ ba có bộ lọc? Thật khó để nói trước mệnh lệnh của nó. – BalusC
hm, vâng. đã đồng ý. – Bozho