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 @WebFilter
chú thích. Tuy nhiên, để giảm thiểu việc web.xml
sử dụng, nó đủ để chú thích tất cả các bộ lọc chỉ với một filterName
để bạn không cần <filter>
định nghĩa, mà chỉ cần một<filter-mapping>
định nghĩa theo thứ tự mong muốn.
Ví dụ,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
chỉ với web.xml
điều 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ữ mẫu URL @WebFilter
, thì bạn có thể 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ể cách tiếp cận nào, tất cả điều này sẽ thất bại trong Tomcat cho đến phiên bản 7.0.28 vì nó bị bóp nghẹt khi <filter-mapping>
không có <filter>
. Xem thêm Sử dụng Tomcat, @WebFilter không hoạt động với <bộ lọc ánh xạ> bên trong web.xml
order
thuộc tính của@WebFilterMapping
chú thích lồng nhau . Tôi tự hỏi liệu người ta không làm điều đó vì đơn giản