WAR'daki ek açıklamaları kullanarak sunucu uygulaması filtre yürütme sırasını tanımlama


167

Webapp'a özgü sunucu uygulaması filtrelerini WAR'un kendisinde tanımlarsak web.xml, filtrelerin yürütme sırası, içinde tanımlandıkları sırayla aynı olacaktır web.xml.

Ancak, bu filtreleri @WebFilterek açıklama kullanarak tanımlarsak , filtrelerin yürütme sırası nedir ve yürütme sırasını nasıl belirleyebiliriz?

Yanıtlar:


187

@WebFilterEk açıklama kullanarak filtre yürütme sırasını tanımlayamazsınız . Bununla birlikte, web.xmlkullanımı en aza indirmek için , tüm filtrelere açıklama eklemek yeterlidir, filterNameböylece <filter>tanıma ihtiyacınız yoktur , ancak <filter-mapping>istenen sırayla bir tanım gerekir.

Örneğin,

@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}

içinde birlikte web.xmlsadece bu:

<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>

URL kalıbını içeride tutmak @WebFilteristiyorsanız, bunu yapabilirsiniz,

@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}

ama yine de tutmalı <url-pattern>in web.xmlo XSD uyarınca gerekli çünkü o boş olabilir ancak,:

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern />
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern />
</filter-mapping>

Yaklaşımdan bağımsız olarak, bu, Tomcat'te 7.0.28 sürümüne kadar başarısız olacaktır çünkü <filter-mapping>onsuz varlığını boğar <filter>. Ayrıca bkz . Tomcat'i kullanma, @WebFilter web.xml içindeki <filter-mapping> ile çalışmaz


5
orderiç içe bir @WebFilterMappingek açıklama niteliği getirebilirlerdi . Basitlik için yapmadım mı acaba
Bozho

12
@Bozho: Bu yeterince spesifik olmayacaktı. Web uygulamanız filtre içeren üçüncü taraf kütüphanelerle birlikte gönderilirse ne olur? Önceden sırasını söylemek zor.
BalusC

1
@BalusC: Örneğinizde bir şeyler ters gitti: url kalıbı bir filtre adıyla kapatıldı.
AndrewBourgeois

3
@AndrewBourgeois: Düzeltildi. Bir kopya macunu hatası oldu. Markdown editörünün Eclipse'deki gibi yerleşik XML doğrulamasına sahip olmaması çok kötü;)
BalusC

6
Kullanmak <url-pattern />JBoss EAP 6.1 üzerinde çalışmaz - @WebFilterdeğeri geçersiz kılar ve filtrenin çalışmasını önler.
seanf

12

Servlet 3.0 spesifikasyonu, bir kabın ek açıklamalar yoluyla bildirilen filtreleri nasıl sipariş etmesi gerektiğine dair bir ipucu vermiyor gibi görünüyor. Bununla birlikte, web.xml dosyasındaki bildirimleriyle filtrelerin nasıl sipariş edileceği açıktır.

Dikkatli ol. Bağımlılıkları olan web.xml dosya sırası filtrelerini kullanın. Bir web.xml dosyası kullanma ihtiyacını en aza indirmek için filtrelerinizin tüm siparişlerini bağımsız hale getirmeye çalışın.


4
Projemde birçok Servlet filtresi var, bunlardan sadece belirli bir filtre ilk olarak adlandırılmalı ve diğer filtrelerin sırası endişelenmemelidir. Web.xml'deki tüm filtreleri kirletmem gerekir mi? Yoksa kısayol var mı?
siva636
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.