से HandlerIntercepter
की जावाडोक :
HandlerInterceptor
मूल रूप से एक सर्वलेट के समान है Filter
, लेकिन बाद के विपरीत यह सिर्फ कस्टम प्री-प्रोसेसिंग को हैंडलर के निष्पादन को प्रतिबंधित करने और कस्टम पोस्ट-प्रोसेसिंग के विकल्प के साथ अनुमति देता है। फिल्टर अधिक शक्तिशाली हैं, उदाहरण के लिए वे अनुरोध और प्रतिक्रिया वस्तुओं का आदान-प्रदान करने की अनुमति देते हैं जो श्रृंखला को सौंप दिया जाता है। ध्यान दें कि एक फिल्टर में विन्यस्त हो जाता है web.xml
, एक
HandlerInterceptor
आवेदन के संदर्भ में।
एक बुनियादी दिशानिर्देश के रूप में, ठीक-ठाक हैंडलर से संबंधित पूर्व-प्रसंस्करण कार्य HandlerInterceptor
कार्यान्वयन के लिए उम्मीदवार हैं , विशेष रूप से फैक्टर-आउट कॉमन हैंडलर कोड और प्राधिकरण चेक। दूसरी ओर, Filter
अनुरोध सामग्री के लिए अच्छी तरह से अनुकूल है और सामग्री से निपटने और मल्टीपार्ट रूपों और GZIP संपीड़न की तरह देखें। यह आमतौर पर तब दिखाई देता है जब किसी को फ़िल्टर को कुछ सामग्री प्रकारों (जैसे चित्र), या सभी अनुरोधों के लिए मैप करने की आवश्यकता होती है।
उस के साथ कहा जा रहा है:
तो कहाँ Interceptor#postHandle()
और के
बीच अंतर है Filter#doFilter()
?
postHandle
हैंडलर विधि आह्वान के बाद बुलाया जाएगा, लेकिन देखने से पहले इसका प्रतिपादन किया जाएगा। तो, आप दृश्य में और अधिक मॉडल ऑब्जेक्ट जोड़ सकते हैं लेकिन आप इसे बदल नहीं सकते HttpServletResponse
क्योंकि यह पहले से ही प्रतिबद्ध है।
doFilter
की तुलना में अधिक बहुमुखी है postHandle
। आप अनुरोध या प्रतिक्रिया को बदल सकते हैं और इसे श्रृंखला में पास कर सकते हैं या अनुरोध प्रसंस्करण को भी अवरुद्ध कर सकते हैं।
इसके अलावा, preHandle
और postHandle
विधियों में, आपके पास HandlerMethod
अनुरोध संसाधित करने की पहुंच है । इसलिए, आप हैंडलर के आधार पर प्री / पोस्ट-प्रोसेसिंग लॉजिक जोड़ सकते हैं। उदाहरण के लिए, आप हैंडलर विधियों के लिए एक तर्क जोड़ सकते हैं जिसमें कुछ एनोटेशन हैं।
सबसे अच्छा अभ्यास कौन से मामलों में इसका उपयोग किया जाना चाहिए?
जैसा कि डॉक्टर ने कहा, ठीक-ठाक हैंडलर से संबंधित पूर्व-प्रसंस्करण कार्य HandlerInterceptor
कार्यान्वयन के लिए उम्मीदवार हैं , विशेष रूप से फैक्टर-आउट कॉमन हैंडलर कोड और प्राधिकरण चेक। दूसरी ओर, Filter
अनुरोध सामग्री के लिए अच्छी तरह से अनुकूल है और सामग्री से निपटने और मल्टीपार्ट रूपों और GZIP संपीड़न की तरह देखें। यह आमतौर पर तब दिखाई देता है जब किसी को फ़िल्टर को कुछ सामग्री प्रकारों (जैसे चित्र), या सभी अनुरोधों के लिए मैप करने की आवश्यकता होती है।