স্প্রিং এমভিসিতে ইন্টারসেপ্টর এবং ফিল্টারের মধ্যে পার্থক্য


114

আমি Filterএবং Interceptorউদ্দেশ্যগুলি সম্পর্কে কিছুটা বিভ্রান্ত হয়ে পড়েছি ।

আমি ডক্স থেকে বুঝেছি, Interceptorঅনুরোধগুলির মধ্যে চালিত হয়। অন্যদিকে Filterরেন্ডারিং ভিউয়ের আগে চালানো হয় তবে কন্ট্রোলারের প্রতিক্রিয়া হওয়ার পরে।

সুতরাং postHandle()ইন্টারসেপ্টর এবং doFilter()ফিল্টার মধ্যে পার্থক্য কোথায় ?

স্প্রিং এমভিসি শেম কোন ক্ষেত্রে এটি ব্যবহার করা উচিত সে ক্ষেত্রে সবচেয়ে ভাল অনুশীলন কী? এই ছবিতে কোথায় কাজ করে Filterএস এবং Interceptorএস?

উত্তর:


91

থেকে HandlerIntercepterএর javadoc :

HandlerInterceptorমূলত একটি সার্লেটের অনুরূপ Filter, তবে পরবর্তীগুলির বিপরীতে এটি হ্যান্ডলারের নিজেই কার্যকর করা নিষিদ্ধ করার বিকল্প এবং কাস্টম পোস্ট-প্রসেসিংয়ের সাথে কাস্টম প্রাক প্রসেসিংয়ের অনুমতি দেয়। ফিল্টারগুলি আরও কার্যকর example নোট করুন যে একটি ফিল্টার অ্যাপ্লিকেশন প্রসঙ্গে web.xmlএকটি কনফিগার করা হয়েছে HandlerInterceptor

একটি মৌলিক গাইডলাইন হিসাবে, সূক্ষ্ম-দানাদার হ্যান্ডলার সম্পর্কিত প্রাক প্রসেসিং কার্যগুলি HandlerInterceptorবাস্তবায়নের প্রার্থী , বিশেষত ফ্যাক্টর-আউট সাধারণ হ্যান্ডলার কোড এবং অনুমোদনের চেক। অন্যদিকে, Filterঅনুরোধ সামগ্রী এবং মাল্টিপার্ট ফর্ম এবং জিজেআইপি সংকোচনের মতো সামগ্রী হ্যান্ডলিং দেখার জন্য উপযুক্ত well এটি সাধারণত যখন নির্দিষ্ট ফিল্টারটি নির্দিষ্ট সামগ্রীর ধরণের (যেমন চিত্রগুলি), বা সমস্ত অনুরোধে ম্যাপ করার প্রয়োজন হয় তখন তা প্রদর্শিত হয়।

এর সাথে বলা হচ্ছে:

তাই যেখানে মধ্যে পার্থক্য Interceptor#postHandle()এবং Filter#doFilter()?

postHandleহ্যান্ডলার পদ্ধতি অনুরোধের পরে তবে ভিউ রেন্ডার করার আগে ডাকা হবে। সুতরাং, আপনি ভিউতে আরও মডেল অবজেক্ট যুক্ত করতে পারেন তবে এটি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ হওয়ার কারণে আপনি পরিবর্তন করতে পারবেন নাHttpServletResponse

doFilterএর চেয়ে অনেক বেশি বহুমুখী postHandle। আপনি অনুরোধ বা প্রতিক্রিয়া পরিবর্তন করতে পারেন এবং এটি শৃঙ্খলে পাস করতে পারেন বা এমনকি অনুরোধ প্রক্রিয়াকরণটি ব্লক করতে পারেন।

এছাড়াও, পদ্ধতি preHandleএবং postHandleপদ্ধতিগুলিতে HandlerMethodআপনার অনুরোধটি প্রক্রিয়াকরণ করাতে অ্যাক্সেস রয়েছে । সুতরাং, আপনি নিজেই হ্যান্ডলারের উপর ভিত্তি করে প্রাক / পোস্ট প্রসেসিং যুক্তি যুক্ত করতে পারেন। উদাহরণস্বরূপ, আপনি হ্যান্ডলার পদ্ধতির জন্য কিছু যুক্তি যুক্ত করতে পারেন যা কিছু টিকা আছে।

কোন ক্ষেত্রে এটি ব্যবহার করা উচিত সে ক্ষেত্রে সবচেয়ে ভাল অনুশীলন কী?

যেমনটি ডক বলেছেন, সূক্ষ্ম দানযুক্ত হ্যান্ডলার সম্পর্কিত প্রাক প্রসেসিং কার্যগুলি HandlerInterceptorবাস্তবায়নের প্রার্থী , বিশেষত ফ্যাক্টর-আউট সাধারণ হ্যান্ডলার কোড এবং অনুমোদনের চেক। অন্যদিকে, Filterঅনুরোধ সামগ্রী এবং মাল্টিপার্ট ফর্ম এবং জিজেআইপি সংকোচনের মতো সামগ্রী হ্যান্ডলিং দেখার জন্য উপযুক্ত well এটি সাধারণত যখন নির্দিষ্ট ফিল্টারটি নির্দিষ্ট সামগ্রীর ধরণের (যেমন চিত্রগুলি), বা সমস্ত অনুরোধে ম্যাপ করার প্রয়োজন হয় তখন তা প্রদর্শিত হয়।


নোট করুন যে একটি ফিল্টার ওয়েব.এক্সএমএল এ কনফিগার হয়েছে, অ্যাপ্লিকেশন প্রসঙ্গে একটি হ্যান্ডলারআইন্টারসেপ্টার ??? তুমি কি বোঝাতে পার?

4
ফিল্টার সার্লেট এপিআই সম্পর্কিত এবং HandlerIntercepterএটি একটি স্প্রিং নির্দিষ্ট ধারণা। কোনও সার্লেট ফিল্টার নিবন্ধ করার জন্য, আপনি এটি পুরানো web.xml(সার্ভলেট 2.5 এবং পুরানো সংস্করণ) অথবা নতুন প্রোগ্রাম্যাটিক অ্যাপ্রোচ (সার্লেট 3+) ব্যবহার করে নিবন্ধভুক্ত করতে পারেন । যেহেতু এটি HandlerIntercepterকেবল একটি বসন্ত বিমূর্ততা, আপনার বসন্তের প্রসঙ্গে নিবন্ধভুক্ত করা উচিত
আলী দেহঘানি

ফিল্টার সার্লেট এপিআই সম্পর্কিত এবং হ্যান্ডলারআইন্টারসেপ্টার একটি স্প্রিং নির্দিষ্ট ধারণা। কুরেক্ট! তবে আপনি ওয়েব.এক্সএমএল দ্বারা নিবন্ধিত WebApplicationযা কিছু অংশ প্রেরণকারীর প্রতি একক, সুতরাং সার্লেট এবং ফিল্টার উভয়ই প্রসঙ্গে জড়িত, এটির সাথে সংযুক্তি সংযুক্তকারী এবং ফিল্টার করা ভাল অনুশীলন, rootContextযদি আপনি এইচভি একাধিক প্রেরণকারী সকলেই ভাগ করে নিতে পারেন।

11

ফিল্টার : - নাম অনুসারে একটি ফিল্টার হ'ল একটি জাভা বর্গ যা প্রতিটি আগত এইচটিটিপি অনুরোধের জন্য এবং প্রতিটি HTTP প্রতিক্রিয়ার জন্য সার্ভলেট ধারক দ্বারা কার্যকর করা হয়। এই পদ্ধতিতে, এইচটিটিপি আগত অনুরোধগুলির উত্সে পৌঁছানোর আগে তাদের পরিচালনা করা সম্ভব হবে যেমন জেএসপি পৃষ্ঠা, একটি সার্লেট বা একটি সাধারণ স্ট্যাটিক পৃষ্ঠা; একইভাবে রিসোর্স কার্যকর করার পরে এইচটিটিপি আউটবাউন্ড প্রতিক্রিয়া পরিচালনা করা সম্ভব।

ইন্টারসেপ্টর : - স্প্রিং ইন্টারসেপ্টর সার্ভলেট ফিল্টারগুলির সাথে সমান তবে তারা এইচটিটিপি রিকুয়েস্ট এবং রেসপন্স পরিচালনা করার জন্য অনেক স্প্রিং কনটেক্সটে কাজ করে তবে তারা আরও পরিশীলিত আচরণ বাস্তবায়ন করতে পারে কারণ সমস্ত বসন্তের প্রসঙ্গে প্রবেশ করতে পারে।


4
উত্স: mkjava.com/tutorial/filter-vs-intercepter সূত্রের উল্লেখ করতে হবে
প্রেমরাজ

স্প্রিং সুরক্ষা ফিল্টার সম্পর্কে কি, এটি আপনাকে বসন্ত প্রসঙ্গে দেয়।
লভিন

6

একজন হ্যান্ডলারআইন্টারসেপ্টর আপনাকে ফিল্টারের চেয়ে আরও সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে, কারণ আপনার আসল লক্ষ্য "হ্যান্ডলার" এ অ্যাক্সেস রয়েছে - এর অর্থ হ'ল অনুরোধটি আসলে যা করছে তার উপর নির্ভর করে আপনি যে কোনও ক্রিয়া সম্পাদন করতে পারেন তার পরিবর্তে পরিবর্তিত হতে পারে (যেখানে সার্লেট ফিল্টার সাধারণভাবে প্রয়োগ করা হয় সমস্ত অনুরোধে - কেবলমাত্র প্রতিটি অনুরোধের প্যারামিটারগুলিকে বিবেচনায় নিতে সক্ষম)। হ্যান্ডলারআইন্টারসেপ্টার 3 টি পৃথক পদ্ধতিও সরবরাহ করে, যাতে আপনি কোনও হ্যান্ডলারকে কল করার আগে আচরণটি প্রয়োগ করতে পারেন, হ্যান্ডলারটি সম্পন্ন হওয়ার পরে কিন্তু রেন্ডারিং দেখার আগে (যেখানে আপনি এমনকি পুরোপুরি দর্শন উপস্থাপনা বাইপাস করতে পারেন), বা ভিউ নিজেই রেন্ডার হওয়ার পরে। এছাড়াও, আপনি হ্যান্ডলারের বিভিন্ন গোষ্ঠীর জন্য বিভিন্ন ইন্টারসেপ্টর সেট আপ করতে পারেন - হ্যান্ডলারম্যাপিং এ ইন্টারসেপ্টরগুলি কনফিগার করা আছে এবং একাধিক হ্যান্ডলারম্যাপিংস থাকতে পারে।

অতএব, যদি আপনার সম্পূর্ণ জেনেরিক কিছু করার প্রয়োজন হয় (যেমন সমস্ত অনুরোধগুলি লগ করুন), তবে একটি ফিল্টার যথেষ্ট - তবে যদি আচরণটি লক্ষ্য হ্যান্ডলারের উপর নির্ভর করে বা আপনি অনুরোধ পরিচালনা এবং দেখার রেন্ডারিংয়ের মধ্যে কিছু করতে চান, তবে হ্যান্ডলারআইন্টারসেপ্টার সেই নমনীয়তা সরবরাহ করে।

তথ্যসূত্র: http://static.springframework.org/sp...ng-interceptor


4
লিঙ্কটি নষ্ট হয়ে গেছে।
জেসন আইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.