Spring Web Services (Spring-WS) হল Spring ফ্রেমওয়ার্কের একটি অংশ যা SOAP ভিত্তিক ওয়েব সার্ভিস তৈরি এবং ব্যবস্থাপনা করতে ব্যবহৃত হয়। Interceptor Spring Web Services-এ একটি গুরুত্বপূর্ণ উপাদান, যা ইনকামিং এবং আউটগোয়িং মেসেজ প্রসেসিংয়ের জন্য ব্যবহৃত হয়।
Spring-WS-এ Interceptor মূলত দুই ধরণের হয়:
- Client-side Interceptor: ক্লায়েন্ট থেকে প্রেরিত SOAP মেসেজকে প্রক্রিয়াজাত করতে ব্যবহৃত হয়।
- Server-side Interceptor: সার্ভারে ইনকামিং মেসেজ প্রক্রিয়াকরণ করতে ব্যবহৃত হয়।
Interceptor ব্যবহার করার প্রক্রিয়া:
Interceptor-এর মাধ্যমে আপনি নিম্নলিখিত কাজগুলি করতে পারেন:
- মেসেজ যাচাই করা (Validation)
- লগিং এবং অডিটিং
- নিরাপত্তা চেক
- প্রয়োজনীয় ডেটা যোগ বা পরিবর্তন
1. Interceptor তৈরি:
Interceptor তৈরির জন্য, Spring-WS আপনাকে EndpointInterceptor বা AbstractEndpointInterceptor ইন্টারফেস অথবা ক্লাস এক্সটেন্ড করার সুবিধা দেয়।
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.server.EndpointInterceptor;
public class MyCustomInterceptor implements EndpointInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
// ইনকামিং রিকোয়েস্ট প্রক্রিয়াজাত করার জন্য কোড লিখুন
System.out.println("Request Intercepted");
return true; // যদি false রিটার্ন করা হয়, তাহলে প্রসেসিং থেমে যাবে
}
@Override
public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception {
// রেসপন্স প্রক্রিয়াজাত করার জন্য কোড লিখুন
System.out.println("Response Intercepted");
return true;
}
@Override
public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception {
// যদি কোনো ত্রুটি ঘটে, তাহলে সেটি প্রক্রিয়াজাত করার জন্য কোড লিখুন
System.out.println("Fault Intercepted");
return true;
}
@Override
public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) throws Exception {
// প্রসেসিং শেষে এই মেথড কল হবে
System.out.println("After Completion");
}
}
2. Interceptor কনফিগার করা:
Interceptor-কে Spring-WS কনফিগারেশনে যুক্ত করতে হবে। Spring-WS এর জন্য আপনি সাধারণত WsConfigurerAdapter ব্যবহার করবেন।
import org.springframework.context.annotation.Configuration;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.server.EndpointInterceptor;
import java.util.List;
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
interceptors.add(new MyCustomInterceptor());
}
}
3. Interceptor কার্যকারিতা:
- handleRequest: ক্লায়েন্টের পাঠানো মেসেজ প্রক্রিয়া করার জন্য ব্যবহৃত হয়।
- handleResponse: সার্ভারের তৈরি রেসপন্স মেসেজ পরিবর্তন বা প্রক্রিয়াজাত করার জন্য ব্যবহৃত হয়।
- handleFault: ত্রুটি ঘটলে এটি ট্রিগার হয়।
- afterCompletion: রিকোয়েস্ট বা রেসপন্স সম্পূর্ণ প্রক্রিয়াজাত হওয়ার পরে এটি ট্রিগার হয়।
উদাহরণ ব্যবহার:
ধরা যাক, আপনি একটি SOAP রিকোয়েস্ট-এর হেডারে টোকেন যাচাই করতে চান। এই কাজটি Interceptor-এর মাধ্যমে সহজে করা যায়।
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
SOAPMessage soapMessage = ((SaajSoapMessage) messageContext.getRequest()).getSaajMessage();
SOAPHeader header = soapMessage.getSOAPHeader();
if (header == null || !isValidToken(header)) {
throw new SecurityException("Invalid Token");
}
return true;
}
private boolean isValidToken(SOAPHeader header) {
// হেডার থেকে টোকেন বের করে যাচাই করুন
return true;
}
Interceptor ব্যবহারের সুবিধা:
- মডুলারিটি: কাস্টম লজিক পরিষ্কারভাবে আলাদা রাখা যায়।
- পুনরায় ব্যবহারযোগ্য: একবার লিখে বহু স্থানে ব্যবহার করা যায়।
- সহজ কনফিগারেশন: Spring Framework-এর কারণে সহজে ইন্টিগ্রেট করা যায়।
এটি ব্যবহার করলে আপনি Spring Web Services-এ একটি পরিষ্কার এবং কার্যকরী উপায়ে মেসেজ প্রসেসিংয়ের কাজ করতে পারবেন।
স্প্রিং ফ্রেমওয়ার্কে, Interceptor একটি বিশেষ কম্পোনেন্ট যা HTTP অনুরোধ (request) এবং প্রতিক্রিয়া (response) প্রসেস করার সময় নির্দিষ্ট পয়েন্টে কাজ করে। এটি মূলত একটি ফিল্টারের মতো কাজ করে যা অনুরোধ এবং প্রতিক্রিয়ার মধ্যে কাস্টম লজিক যোগ করার সুযোগ দেয়।
স্প্রিং ওয়েব সার্ভিসেসে (Spring Web Services), Interceptor বিশেষভাবে SOAP এবং RESTful সেবা প্রসেসিংয়ে ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীর অনুরোধ আসার আগে এবং প্রতিক্রিয়া পাঠানোর আগে/পর পরে কাজ করে।
Interceptor-এর কাজের ধাপসমূহ:
- Pre-Handle: অনুরোধ প্রসেসিং শুরু হওয়ার আগে কিছু লজিক প্রয়োগ করা।
- Post-Handle: কন্ট্রোলার বা সার্ভিস লেয়ার সফলভাবে কাজ শেষ করার পরে কিছু কাজ করা।
- After-Completion: সম্পূর্ণ প্রতিক্রিয়া পাঠানোর পরে ক্লিনআপ বা অন্যান্য কাজ।
Interceptor-এর প্রয়োজনীয়তা
- অনুরোধ যাচাইকরণ (Authentication and Authorization):
- Interceptor ব্যবহার করে আপনি প্রতিটি অনুরোধের জন্য নিরাপত্তা যাচাই করতে পারেন।
- উদাহরণস্বরূপ, টোকেন (JWT), API কী, অথবা কুকি যাচাই করতে Interceptor ব্যবহার করা হয়।
- লগিং এবং মনিটরিং:
- সিস্টেমের লোড এবং অনুরোধের বিবরণ লগ করার জন্য Interceptor ব্যবহার করা যায়।
- এটি ডিবাগিং এবং অডিটিং সহজ করে।
- কাস্টম হেডার যোগ করা বা পরিবর্তন করা:
- প্রতিটি অনুরোধ বা প্রতিক্রিয়ার জন্য হেডার কাস্টমাইজ করতে Interceptor খুব কার্যকর।
- ডেটা এনকোডিং/ডিকোডিং:
- SOAP বা REST মেসেজ এনকোড/ডিকোড করার জন্য Interceptor ব্যবহার করা হয়।
- ক্যাশিং (Caching):
- নির্দিষ্ট অনুরোধ বা প্রতিক্রিয়া ক্যাশে রাখার লজিক যোগ করতে Interceptor সহায়ক।
- প্রতিক্রিয়া রূপান্তর (Response Transformation):
- Interceptor ব্যবহার করে কন্ট্রোলার থেকে আসা ডেটা পরিবর্তন বা ফরম্যাট করা যায়।
স্প্রিং-এ Interceptor কনফিগার করা
স্প্রিং-এ Interceptor কনফিগার করতে আপনাকে HandlerInterceptor ইন্টারফেসটি বাস্তবায়ন করতে হবে অথবা WebMvcConfigurer ইন্টারফেসের মাধ্যমে Interceptor রেজিস্টার করতে হবে।
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre Handle method is Called");
return true; // Return true to continue the request
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is Called");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("After Completion method is Called");
}
}
এটি WebMvcConfigurer এর মাধ্যমে রেজিস্টার করতে:
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
উপসংহার
Spring Web Services-এ Interceptor একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি লাইটওয়েট এবং অ-flexible কাঠামোর মাধ্যমে HTTP অনুরোধ এবং প্রতিক্রিয়ার কাস্টম লজিক যুক্ত করার সুযোগ দেয়। নিরাপত্তা, লগিং, এবং ডেটা প্রসেসিং সহ বিভিন্ন কাজে এটি অপরিহার্য।
Spring Web Services-এ (Spring-WS) ক্লায়েন্ট এবং সার্ভার সাইড ইন্টারসেপ্টর তৈরি করা হলো একটি গুরুত্বপূর্ণ ফিচার, যা ওয়েব সার্ভিসের অনুরোধ এবং প্রতিক্রিয়াগুলি প্রক্রিয়াজাত করতে ব্যবহার করা হয়। ইন্টারসেপ্টর মূলত মেসেজগুলি ক্যাপচার করে এবং প্রয়োজনীয় লজিক প্রয়োগ করতে দেয়, যেমন লগিং, অথেন্টিকেশন, অথোরাইজেশন, ডাটা ভ্যালিডেশন ইত্যাদি।
১. ক্লায়েন্ট সাইড ইন্টারসেপ্টর
Spring-WS-এ ক্লায়েন্ট সাইডে ClientInterceptor ইন্টারফেস ব্যবহার করে ইন্টারসেপ্টর তৈরি করা হয়।
উদাহরণ:
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.context.MessageContext;
public class CustomClientInterceptor implements ClientInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext) throws Exception {
System.out.println("Client Request Intercepted");
// Custom logic here
return true; // Continue the execution
}
@Override
public boolean handleResponse(MessageContext messageContext) throws Exception {
System.out.println("Client Response Intercepted");
// Custom logic here
return true; // Continue the execution
}
@Override
public boolean handleFault(MessageContext messageContext) throws Exception {
System.out.println("Client Fault Intercepted");
// Custom logic here
return true; // Continue the execution
}
}
ইন্টারসেপ্টর যোগ করা:
import org.springframework.ws.client.core.WebServiceTemplate;
@Configuration
public class WebServiceClientConfig {
@Bean
public WebServiceTemplate webServiceTemplate() {
WebServiceTemplate template = new WebServiceTemplate();
template.setInterceptors(new ClientInterceptor[]{new CustomClientInterceptor()});
return template;
}
}
২. সার্ভার সাইড ইন্টারসেপ্টর
Spring-WS-এ সার্ভার সাইডে EndpointInterceptor ইন্টারফেস ব্যবহার করা হয়।
উদাহরণ:
import org.springframework.ws.server.endpoint.interceptor.EndpointInterceptor;
import org.springframework.ws.context.MessageContext;
public class CustomServerInterceptor implements EndpointInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
System.out.println("Server Request Intercepted");
// Custom logic here
return true; // Continue the execution
}
@Override
public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception {
System.out.println("Server Response Intercepted");
// Custom logic here
return true; // Continue the execution
}
@Override
public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception {
System.out.println("Server Fault Intercepted");
// Custom logic here
return true; // Continue the execution
}
@Override
public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) throws Exception {
System.out.println("After Completion Logic");
// Custom logic here
}
}
ইন্টারসেপ্টর যোগ করা:
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.server.EndpointInterceptor;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebServiceServerConfig extends WsConfigurerAdapter {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
interceptors.add(new CustomServerInterceptor());
}
}
ইন্টারসেপ্টর ব্যবহারের সম্ভাব্য প্রয়োগ:
- অথেন্টিকেশন এবং অথোরাইজেশন: অনুরোধ অনুমোদন চেক করা।
- লগিং এবং মনিটরিং: মেসেজ লগ করা বা পর্যালোচনা করা।
- ডাটা ভ্যালিডেশন: অনুরোধ ডেটার মান যাচাই করা।
- এক্সেপশন হ্যান্ডলিং: ত্রুটি পরিচালনা করা।
Spring-WS ইন্টারসেপ্টর কাস্টমাইজেশন এবং ডাটা প্রসেসিং-এর জন্য শক্তিশালী টুল প্রদান করে।
স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services) এ Custom Logging এবং Security Interceptor যোগ করা একটি গুরুত্বপূর্ণ বিষয়, বিশেষ করে যখন আপনার ওয়েব সার্ভিসের কার্যকারিতা পর্যবেক্ষণ এবং সুরক্ষা নিশ্চিত করার প্রয়োজন হয়। নিচে এই দুইটি বিষয়ে বিস্তারিত আলোচনা করা হলো।
Custom Logging Interceptor
Custom Logging Interceptor ওয়েব সার্ভিসের প্রতিটি অনুরোধ এবং প্রতিক্রিয়া (Request & Response) লগ করতে সাহায্য করে। এটি ডিবাগিং এবং সার্ভিসের কার্যক্রম বিশ্লেষণে গুরুত্বপূর্ণ।
ধাপসমূহ:
LoggingInterceptor ক্লাস তৈরি করুন
স্প্রিং-এরEndpointInterceptorইন্টারফেস ইমপ্লিমেন্ট করুন। উদাহরণ:import org.springframework.ws.context.MessageContext; import org.springframework.ws.server.EndpointInterceptor; public class LoggingInterceptor implements EndpointInterceptor { @Override public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception { System.out.println("Request: " + messageContext.getRequest().getPayloadSource()); return true; // Continue processing } @Override public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception { System.out.println("Response: " + messageContext.getResponse().getPayloadSource()); return true; } @Override public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception { System.out.println("Fault: " + messageContext.getResponse().getPayloadSource()); return true; } @Override public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) { // Optional: Cleanup resources or log additional info } }Interceptor Configuration
@Configurationক্লাসে ইন্টারসেপ্টর রেজিস্টার করুন:import org.springframework.context.annotation.Configuration; import org.springframework.ws.config.annotation.EnableWs; import org.springframework.ws.config.annotation.WsConfigurerAdapter; @EnableWs @Configuration public class WebServiceConfig extends WsConfigurerAdapter { @Override public void addInterceptors(List<EndpointInterceptor> interceptors) { interceptors.add(new LoggingInterceptor()); } }
Security Interceptor
Security Interceptor ব্যবহার করে ওয়েব সার্ভিসে সুরক্ষা প্রয়োগ করা হয়। এটি সাধারণত WS-Security স্ট্যান্ডার্ড অনুসারে কার্যকর হয় এবং ইউজারনেম, পাসওয়ার্ড, টোকেন বা সিগনেচার ভ্যালিডেট করে।
ধাপসমূহ:
WS-Security Configuration
স্প্রিং ওয়েব সার্ভিসেWss4jSecurityInterceptorব্যবহার করুন:import org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SecurityConfig { @Bean public Wss4jSecurityInterceptor securityInterceptor() { Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor(); // Validate incoming messages securityInterceptor.setValidateRequest(true); securityInterceptor.setValidateResponse(true); // Set user credentials securityInterceptor.setSecurementUsername("username"); securityInterceptor.setSecurementPassword("password"); return securityInterceptor; } }Interceptor যুক্ত করুন
সিকিউরিটি ইন্টারসেপ্টর কনফিগারেশনে যুক্ত করুন:@Configuration public class WebServiceConfig extends WsConfigurerAdapter { @Override public void addInterceptors(List<EndpointInterceptor> interceptors) { interceptors.add(securityInterceptor()); // Adding security interceptor interceptors.add(new LoggingInterceptor()); // Adding logging interceptor } }- Spring Security Policies (Optional)
যদি আরও জটিল পলিসি প্রয়োগ করতে চান (যেমন: এনক্রিপশন বা সিগনেচার ভ্যালিডেশন), তাহলে WS-Policy এবং WSS4J লাইব্রেরি ব্যবহার করুন।
সারসংক্ষেপ
- Custom Logging Interceptor অনুরোধ এবং প্রতিক্রিয়া লগ করতে ব্যবহৃত হয়।
- Security Interceptor ব্যবহারকারীর পরিচয় এবং বার্তা ভ্যালিডেট করতে ব্যবহৃত হয়।
এই পদ্ধতি অনুসরণ করে আপনি স্প্রিং ওয়েব সার্ভিসে কাস্টম লগিং এবং নিরাপত্তা ইন্টারসেপ্টর সফলভাবে যুক্ত করতে পারবেন।
Spring Web Services-এ Interceptor ব্যবহার একটি সাধারণ কৌশল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে HTTP বা SOAP বার্তাগুলির প্রক্রিয়াকরণে হস্তক্ষেপ করতে ব্যবহৃত হয়। Interceptor-গুলো সাধারণত লগিং, অথেনটিকেশন, অথরাইজেশন, অথবা বার্তা পরিবর্তন করতে ব্যবহৃত হয়।
নিচে Spring Web Services-এ Interceptor ব্যবহার করার একটি উদাহরণ দেওয়া হলো:
ধরি, আপনি একটি SOAP ওয়েব সার্ভিস ব্যবহার করছেন, এবং প্রতিটি অনুরোধের আগে একটি নির্দিষ্ট হেডার যাচাই করতে চান।
ধাপ ১: Maven নির্ভরতা যোগ করুন
আপনার pom.xml ফাইলে নিচের নির্ভরতাগুলো যোগ করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
</dependencies>
ধাপ ২: Interceptor তৈরি করুন
একটি ক্লাস তৈরি করুন যা EndpointInterceptor ইন্টারফেস ইমপ্লিমেন্ট করে।
package com.example.interceptor;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.server.EndpointInterceptor;
import org.springframework.ws.soap.SoapHeader;
import org.springframework.ws.soap.SoapMessage;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
public class CustomInterceptor implements EndpointInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();
SoapHeader header = soapMessage.getSoapHeader();
if (header == null) {
throw new RuntimeException("Missing SOAP header");
}
// Example: Validate a specific header
Source source = header.getSource();
DOMSource domSource = (DOMSource) source;
// Validate the header content as needed
return true; // Continue the processing if validation passes
}
@Override
public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception {
// Logic for response handling
return true;
}
@Override
public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception {
// Logic for fault message handling
return true;
}
@Override
public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) throws Exception {
// Cleanup logic after completion
}
}
ধাপ ৩: Interceptor Configurations
একটি কনফিগারেশন ক্লাস তৈরি করুন যেখানে Interceptor রেজিস্টার করবেন।
package com.example.config;
import com.example.interceptor.CustomInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.server.EndpointInterceptor;
import java.util.List;
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
interceptors.add(new CustomInterceptor());
}
}
ধাপ ৪: SOAP ক্লায়েন্ট থেকে অনুরোধ পাঠানো
SOAP ক্লায়েন্ট থেকে বার্তা পাঠালে Interceptor প্রথমে হেডারটি যাচাই করবে।
আউটপুট
- যদি হেডারটি বৈধ হয়, অনুরোধটি প্রসেস করা হবে।
- যদি হেডারটি অনুপস্থিত বা অবৈধ হয়, Interceptor একটি ত্রুটি নিক্ষেপ করবে।
এই পদ্ধতিটি ব্যবহার করে আপনি Spring Web Services-এ Interceptor সহজেই যোগ করতে এবং ব্যবহার করতে পারবেন।
Read more