Struts 2 ফ্রেমওয়ার্কে Security কনফিগারেশন দুটি স্তরে করা যেতে পারে:
- Action Level Security: যেখানে নিরাপত্তার নীতিগুলি নির্দিষ্ট অ্যাকশন ক্লাসগুলির জন্য প্রয়োগ করা হয়।
- Interceptor Level Security: যেখানে নিরাপত্তা ইন্টারসেপ্টর ব্যবহার করে ক্লায়েন্টের রিকোয়েস্টকে বৈধতা প্রদান এবং বিভিন্ন নিরাপত্তা চেক করা হয়।
এই দুটি স্তরে নিরাপত্তা কনফিগারেশন ব্যবহারকারীর অ্যাপ্লিকেশনকে সুরক্ষিত রাখতে সহায়ক এবং এটি ক্লায়েন্টের প্রবেশাধিকার সীমাবদ্ধ করতে এবং সেশন ভ্যালিডেশন বা রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল প্রয়োগ করতে সাহায্য করে।
Action Level Security
Action Level Security এ, নির্দিষ্ট অ্যাকশন ক্লাসে নিরাপত্তা ব্যবস্থা প্রয়োগ করা হয়। অর্থাৎ, নির্দিষ্ট অ্যাকশন ক্লাসের মধ্যে এক্সেস কন্ট্রোল এবং ইউজার ভ্যালিডেশন করা হয়। এই ক্ষেত্রে, আমরা সাধারণত Struts 2 এর SecurityInterceptor ব্যবহার করতে পারি অথবা নিজের কাস্টম ইন্টারসেপ্টর তৈরি করতে পারি যা নির্দিষ্ট এক্সেস কন্ট্রোল এবং ইউজারের রোল যাচাই করবে।
Action Level Security কনফিগারেশন
1. SecurityInterceptor ব্যবহার করা
Struts 2 তে SecurityInterceptor কে ব্যবহার করে আপনি অ্যাকশনের জন্য নিরাপত্তা চেক করতে পারেন। এই ইন্টারসেপ্টরটি ব্যবহারকারীর রোল যাচাই করতে সহায়ক এবং অ্যাকশনটির জন্য সঠিক এক্সেস কন্ট্রোল প্রয়োগ করতে সাহায্য করে।
2. struts.xml ফাইলে কনফিগারেশন
struts.xml ফাইলে SecurityInterceptor বা কাস্টম নিরাপত্তা ইন্টারসেপ্টর যুক্ত করতে হবে:
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="adminDashboard" class="com.example.AdminAction">
<interceptor-ref name="securityInterceptor"/> <!-- SecurityInterceptor যুক্ত করা -->
<result name="success">/WEB-INF/content/adminDashboard.jsp</result>
<result name="input">/WEB-INF/content/login.jsp</result>
</action>
</package>
<interceptors>
<interceptor name="securityInterceptor" class="com.example.SecurityInterceptor"/>
</interceptors>
</struts>
এখানে, securityInterceptor ইন্টারসেপ্টর AdminAction অ্যাকশনের জন্য কনফিগার করা হয়েছে।
3. SecurityInterceptor (Custom) তৈরি করা
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class SecurityInterceptor implements Interceptor {
@Override
public void destroy() {}
@Override
public void init() {}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// এখানে ব্যবহারকারীর রোল বা এক্সেস যাচাই করা হবে
String userRole = (String) invocation.getInvocationContext().getSession().get("userRole");
if (userRole == null || !userRole.equals("admin")) {
return "input"; // যদি ব্যবহারকারী 'admin' না হন, তাহলে লগিন পেজে রিডিরেক্ট হবে
}
return invocation.invoke();
}
}
এই কাস্টম SecurityInterceptor ক্লাসটি ব্যবহারকারীর সেশন থেকে রোল পরীক্ষা করে এবং যদি ব্যবহারকারী 'admin' না হন তবে তাকে লগিন পেজে রিডিরেক্ট করবে।
Interceptor Level Security
Interceptor Level Security এ, আপনি নিরাপত্তা কনফিগারেশন ইন্টারসেপ্টর স্তরে প্রয়োগ করবেন। এটি সাধারণত session validation, user role validation, IP address checking, authentication, authorization ইত্যাদি চেক করতে ব্যবহৃত হয়।
Struts 2 এ ইন্টারসেপ্টর ব্যবহার করে বিভিন্ন নিরাপত্তা কনসার্ন যেমন CSRF (Cross-Site Request Forgery), XSS (Cross-Site Scripting), Session Hijacking Prevention, এবং Access Control কার্যকরভাবে পরিচালনা করা যেতে পারে।
Interceptor Level Security কনফিগারেশন
1. SessionInterceptor
Struts 2 এর একটি সাধারণ ইন্টারসেপ্টর হল SessionInterceptor। এটি ব্যবহার করে আপনি সেশনের ভ্যালিডেশন করতে পারেন এবং যদি সেশন শেষ হয়ে যায়, তবে ব্যবহারকারীকে লগিন পেজে রিডিরেক্ট করা হয়।
2. struts.xml ফাইলে SessionInterceptor কনফিগারেশন
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="profile" class="com.example.ProfileAction">
<interceptor-ref name="sessionInterceptor"/> <!-- SessionInterceptor যুক্ত করা -->
<result name="success">/WEB-INF/content/profile.jsp</result>
<result name="input">/WEB-INF/content/login.jsp</result>
</action>
</package>
<interceptors>
<interceptor name="sessionInterceptor" class="com.example.SessionInterceptor"/>
</interceptors>
</struts>
3. SessionInterceptor (Custom) তৈরি করা
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class SessionInterceptor implements Interceptor {
@Override
public void destroy() {}
@Override
public void init() {}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// সেশন যাচাই করা
String userSession = (String) invocation.getInvocationContext().getSession().get("userSession");
if (userSession == null) {
return "input"; // সেশন না থাকলে লগিন পেজে রিডিরেক্ট হবে
}
return invocation.invoke();
}
}
এই কাস্টম SessionInterceptor ক্লাসটি সেশন যাচাই করে এবং যদি সেশন পাওয়া না যায়, তাহলে ব্যবহারকারীকে লগিন পেজে রিডিরেক্ট করবে।
Conclusion
Struts 2 এ Action Level এবং Interceptor Level এ নিরাপত্তা কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনকে সুরক্ষিত রাখে এবং নির্দিষ্ট রোল বা ব্যবহারকারীদের এক্সেস কন্ট্রোল দেয়। Action Level Security ব্যবহারকারীর এক্সেস কন্ট্রোলের জন্য উপযুক্ত যেখানে আমরা নির্দিষ্ট অ্যাকশনের জন্য নিরাপত্তা প্রয়োগ করতে পারি, এবং Interceptor Level Security নিরাপত্তা চেকগুলো সার্বিকভাবে পরিচালনা করে, যেমন সেশন ভ্যালিডেশন, এক্সেস কন্ট্রোল ইত্যাদি।
এই দুটি স্তরের নিরাপত্তা কনফিগারেশন ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং সুরক্ষিত করতে পারেন।