WAR में एनोटेशन का उपयोग करके निष्पादन के सर्वलेट फ़िल्टर ऑर्डर को कैसे परिभाषित करें


167

यदि हम WAR के स्वयं के वेबएप विशिष्ट सर्वलेट फिल्टर को परिभाषित करते हैं web.xml, तो फिल्टर के निष्पादन का क्रम उसी क्रम में होगा जिस क्रम में वे परिभाषित हैं web.xml

लेकिन, यदि हम @WebFilterएनोटेशन का उपयोग करके उन फिल्टर को परिभाषित करते हैं, तो फिल्टर के निष्पादन का क्रम क्या है और हम निष्पादन के क्रम को कैसे निर्धारित कर सकते हैं?

जवाबों:


187

आप वास्तव में @WebFilterएनोटेशन का उपयोग करके फ़िल्टर निष्पादन आदेश को परिभाषित नहीं कर सकते हैं । हालाँकि, web.xmlउपयोग को कम से कम करने के लिए , यह filterNameइतना है कि आप <filter>परिभाषा की जरूरत नहीं है , लेकिन <filter-mapping>वांछित क्रम में सिर्फ एक परिभाषा के साथ सभी फिल्टर एनोटेट करने के लिए पर्याप्त है ।

उदाहरण के लिए,

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

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

में साथ web.xmlसिर्फ इस:

<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 प्रतिमान को रखना चाहते हैं @WebFilter, तो आप ऐसा कर सकते हैं,

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

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

लेकिन आप अभी भी रखना चाहिए <url-pattern>में web.xmlहै, क्योंकि यह XSD के अनुसार आवश्यक है, हालांकि यह खाली हो सकता है:

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

दृष्टिकोण के बावजूद, यह सब टॉमकैट में संस्करण 7.0.28 तक विफल हो जाएगा क्योंकि यह <filter-mapping>बिना उपस्थिति के चुटकुले है <filter>Tomcat का उपयोग करते हुए भी देखें , web.xml के अंदर <eb> फ़िल्टर फ़िल्टर के साथ काम नहीं करता है


5
वे orderनेस्टेड @WebFilterMappingएनोटेशन की विशेषता प्रस्तुत कर सकते थे । मुझे आश्चर्य है कि क्या यह सरलता के लिए नहीं किया
Bozho

12
@Bozho: यह पर्याप्त विशिष्ट नहीं होगा। क्या होगा अगर आपका वेब ऐप 3rd पार्टी लाइब्रेरीज़ के साथ शिप करता है जिसमें फ़िल्टर भी शामिल है? इसके आदेश को पहले से बताना कठिन है।
19us पर BalusC

1
@ बाल्सक: आपके उदाहरण में कुछ गलत हो गया है: यूआरएल-पैटर्न एक फिल्टर-नाम के साथ बंद है।
एंड्रयूबॉर्ज

3
@AndrewBourgeois: फिक्स्ड। एक नकलची त्रुटि थी। बहुत बुरा है कि मार्कडाउन संपादक के पास एक्लिप्स की तरह XML सत्यापन नहीं है;)
बालुसक

6
<url-pattern />JBoss EAP 6.1 का उपयोग करना काम नहीं करता है - यह @WebFilterमान को ओवरराइड करता है और फ़िल्टर को बिल्कुल भी चलने से रोकता है।
सीन

12

सर्वलेट 3.0 युक्ति एक संकेत प्रदान करने के लिए प्रतीत नहीं होती है कि एक कंटेनर को कैसे फ़िल्टर करना चाहिए जो एनोटेशन के माध्यम से घोषित किया गया है। हालांकि यह स्पष्ट है कि कैसे web.xml फ़ाइल में उनकी घोषणा के माध्यम से फ़िल्टर ऑर्डर करने के लिए।

सुरक्षित रहना। अन्योन्याश्रितताओं वाले web.xml फ़ाइल ऑर्डर फ़िल्टर का उपयोग करें। एक web.xml फ़ाइल का उपयोग करने की आवश्यकता को कम करने के लिए अपने सभी आदेशों को स्वतंत्र बनाने के लिए प्रयास करें।


4
मेरी परियोजना में मेरे पास कई सर्वलेट फिल्टर हैं, उनमें से केवल एक विशेष फिल्टर को पहले कहा जाना चाहिए और अन्य फिल्टर का क्रम चिंता का विषय नहीं है। क्या मुझे web.xml के सभी फ़िल्टर को अपवित्र करना है? या कोई शॉर्ट-कट हैं?
siva636
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.