Spring MVC তে Interceptors ব্যবহৃত হয় HTTP রিকোয়েস্টের প্রতি কিছু কাজ বা প্রক্রিয়া সম্পাদন করার জন্য, যেমন লগিং, অথেনটিকেশন, অথরাইজেশন বা রিকোয়েস্ট মডিফিকেশন। Interceptors আপনাকে একটি হুক প্রদান করে যা Controller এর মধ্যে আসার আগে বা পরে কাজ করতে পারে।
Spring MVC তে Interceptors তৈরি করার জন্য, আপনাকে HandlerInterceptor ইন্টারফেস ইমপ্লিমেন্ট করতে হয়। এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে আপনি Spring MVC Interceptor তৈরি এবং কনফিগার করবেন।
Step 1: Interceptor Interface
Spring MVC তে HandlerInterceptor ইন্টারফেসের ৩টি প্রধান মেথড থাকে:
preHandle(): রিকোয়েস্ট প্রোসেসিংয়ের আগে কল করা হয়।postHandle(): রিকোয়েস্ট প্রোসেসিংয়ের পরে, কিন্তু রেসপন্স পাঠানোর আগে কল করা হয়।afterCompletion(): রিকোয়েস্ট প্রোসেসিং শেষে এবং রেসপন্স পাঠানোর পর কল করা হয়।
এখানে একটি সাধারণ Interceptor তৈরি করা হয়েছে যা রিকোয়েস্টের আগে এবং পরে কাজ করবে।
Step 2: Interceptor Implementation
package com.example.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
// Called before the controller method is invoked
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre Handle method is Calling");
// Returning true allows the request to proceed to the controller
return true;
}
// Called after the controller method is invoked, but before the response is sent
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, org.springframework.web.servlet.ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is Calling");
}
// Called after the complete request has finished
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("Request and Response is completed");
}
}
Explanation:
preHandle(): এই মেথডে আপনি রিকোয়েস্ট আসার আগে যেকোনো কাজ করতে পারেন, যেমন লগিং, অথেনটিকেশন চেক।postHandle(): এই মেথডে আপনি কন্ট্রোলার প্রোসেসিংয়ের পর কাজ করতে পারেন, কিন্তু রেসপন্স ফেরত দেওয়ার আগে।afterCompletion(): রিকোয়েস্ট সম্পূর্ণ হওয়ার পর কাজ করতে পারেন, যেমন লগিং বা রিসোর্স ক্লিনআপ।
Step 3: Register the Interceptor
Spring MVC তে Interceptor রেজিস্টার করতে, আপনাকে WebMvcConfigurer ইন্টারফেস ইমপ্লিমেন্ট করতে হবে এবং addInterceptors() মেথডে Interceptor রেজিস্টার করতে হবে।
package com.example.config;
import com.example.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// Register the interceptor for all requests
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**") // Apply to all URLs
.excludePathPatterns("/login", "/register"); // Exclude certain URLs if needed
}
}
Explanation:
addInterceptor(): এই মেথডে আপনি আপনার কাস্টম ইন্টারসেপ্টর যোগ করেন।addPathPatterns("/**"): সমস্ত URL পাথের জন্য ইন্টারসেপ্টর অ্যাপ্লাই করতে।excludePathPatterns("/login", "/register"): কিছু URL থেকে ইন্টারসেপ্টর অযোগ্য করতে (যেমন লগইন বা রেজিস্ট্রেশন পেজ)।
Step 4: Create a Simple Controller
এখন একটি সাধারণ কন্ট্রোলার তৈরি করি যা Interceptor দ্বারা ইন্টারসেপ্টেড হবে।
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
@GetMapping("/home")
public String home() {
System.out.println("Home method is called");
return "home"; // Return a view name
}
@GetMapping("/about")
public String about() {
System.out.println("About method is called");
return "about"; // Return a view name
}
}
Explanation:
@GetMapping("/home"): এই রিকোয়েস্টেhomeমেথড কল হবে এবং ইন্টারসেপ্টর হ্যান্ডেল করবে।@GetMapping("/about"): এই রিকোয়েস্টেaboutমেথড কল হবে এবং ইন্টারসেপ্টর হ্যান্ডেল করবে।
Step 5: Configure Views
এখন আপনাকে দুটি জিপিএস পৃষ্ঠা তৈরি করতে হবে যা /home এবং /about রিকোয়েস্টে রিটার্ন হবে।
home.jsp (Located at /WEB-INF/views/home.jsp):
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>Welcome to the Home Page!</h1>
</body>
</html>
about.jsp (Located at /WEB-INF/views/about.jsp):
<html>
<head>
<title>About Page</title>
</head>
<body>
<h1>Welcome to the About Page!</h1>
</body>
</html>
Step 6: Run and Test the Application
- Run your application (Spring Boot or traditional Spring MVC).
- Access the URLs:
- Open the browser and navigate to
http://localhost:8080/homeandhttp://localhost:8080/about. - You will see the messages printed in the console from both
MyControllerandMyInterceptorshowing the flow through the interceptor.
- Open the browser and navigate to
Console Output Example:
Pre Handle method is Calling
Home method is called
Post Handle method is Calling
Request and Response is completed
Conclusion
Spring MVC তে Interceptors আপনাকে রিকোয়েস্ট এবং রেসপন্সের চক্রে কিছু কাস্টম লজিক যোগ করার সুযোগ দেয়। আপনি HandlerInterceptor ইন্টারফেস ইমপ্লিমেন্ট করে রিকোয়েস্ট আসার আগে, পরে, বা প্রক্রিয়াকরণ শেষ হওয়ার পর কাজ করতে পারেন। এর মাধ্যমে আপনি লগিং, অথেনটিকেশন, অথরাইজেশন, বা রিকোয়েস্ট মডিফিকেশন করতে পারবেন। Interceptor ব্যবহার করার মাধ্যমে আপনার Spring MVC অ্যাপ্লিকেশন আরও শক্তিশালী এবং কাস্টমাইজেবল হতে পারে।
Read more