Struts 2-এ Security Management অত্যন্ত গুরুত্বপূর্ণ, বিশেষত ওয়েব অ্যাপ্লিকেশনে নিরাপত্তা সুনিশ্চিত করার জন্য। ওয়েব অ্যাপ্লিকেশনগুলিতে নিরাপত্তা ব্যবস্থাপনা একাধিক স্তরে করতে হয়, যেমন অথেনটিকেশন (Authentication), অথরাইজেশন (Authorization), ইনপুট ভ্যালিডেশন, এবং XSS (Cross-site Scripting), CSRF (Cross-Site Request Forgery) এর মতো আক্রমণ থেকে সুরক্ষা। Struts 2 ফ্রেমওয়ার্কে বেশ কিছু বিল্ট-ইন ফিচার রয়েছে যা নিরাপত্তা ব্যবস্থাপনাকে সহজ করে তোলে।
এখানে আমরা Struts 2 এর নিরাপত্তা ব্যবস্থাপনার বিভিন্ন দিক সম্পর্কে আলোচনা করব।
1. Authentication (অথেনটিকেশন)
Authentication হল প্রক্রিয়া যেখানে একটি সিস্টেম নিশ্চিত করে যে ব্যবহারকারী সঠিকভাবে পরিচিত (logged in) কিনা। Struts 2-এ authentication পরিচালনার জন্য সাধারণত Spring Security, Apache Shiro বা অন্য কোনও নিরাপত্তা ফ্রেমওয়ার্ক ব্যবহার করা হয়।
Spring Security ইন্টিগ্রেশন উদাহরণ:
Spring Security Struts 2 অ্যাপ্লিকেশনের সাথে authentication এবং authorization সুরক্ষিত করতে ব্যবহৃত হয়। Spring Security ব্যবহার করে ইউজারকে লগইন করার এবং সুরক্ষিত পেজগুলিতে প্রবেশ করার অনুমতি দেওয়ার প্রক্রিয়া সহজ হয়।
2. Authorization (অথরাইজেশন)
Authorization হল সেই প্রক্রিয়া যেখানে ব্যবহারকারীর অনুমতি যাচাই করা হয়, অর্থাৎ সে কি নির্দিষ্ট একটি রিসোর্স বা অ্যাকশন এক্সেস করতে পারবে কিনা।
Struts 2-এ authorization কনফিগার করা হয় সিস্টেমের লগইন প্রক্রিয়ার পর। বিভিন্ন ব্যবহারকারীর জন্য বিভিন্ন ভূমিকা (role) নির্ধারণ করে, যেমন admin, user, guest, ইত্যাদি, এবং সেই অনুযায়ী access control নির্ধারণ করা হয়।
Role-Based Authorization উদাহরণ:
Struts 2 অ্যাপ্লিকেশনে role-based authorization কনফিগারেশন করার জন্য, আপনি Spring Security বা Apache Shiro ব্যবহার করতে পারেন। তবে, Struts 2 একটি সহজ action কনফিগারেশনও সরবরাহ করে।
<struts>
<package name="secure" extends="struts-default">
<action name="adminPage" class="com.example.action.AdminAction">
<interceptors>
<interceptor-ref name="securityInterceptor"/>
</interceptors>
<result name="success">/adminPage.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
এখানে:
- securityInterceptor এক্সিকিউশনের আগে যাচাই করবে যে ইউজারের এই পৃষ্ঠার অ্যাক্সেস অধিকার রয়েছে কিনা।
3. Input Validation (ইনপুট ভ্যালিডেশন)
Struts 2 ইনপুট ভ্যালিডেশনের জন্য বেশ কিছু validation framework সরবরাহ করে, যা ইনপুট ডেটার নিরাপত্তা নিশ্চিত করে। এটি ইনপুট ডেটার XSS (Cross-Site Scripting) আক্রমণ থেকে সুরক্ষা দেয় এবং শুধু বৈধ ডেটা গ্রহণ করে।
Struts 2 Validation উদাহরণ:
UserAction.java (Action Class)
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.validation.SkipValidation;
public class UserAction extends ActionSupport {
private String username;
private String email;
// Getter and Setter methods
@Override
public String execute() {
// Business Logic
return SUCCESS;
}
@Override
public void validate() {
if (username == null || username.trim().isEmpty()) {
addFieldError("username", "Username is required.");
}
if (email == null || email.trim().isEmpty()) {
addFieldError("email", "Email is required.");
} else if (!email.matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
addFieldError("email", "Invalid email format.");
}
}
}
এখানে:
- validate() মেথডে ইনপুট ভ্যালিডেশন করা হয়েছে, যেখানে ইউজারনেম এবং ইমেইল ফিল্ডের ত্রুটি যাচাই করা হয়েছে।
XML Validation Configuration:
<struts>
<package name="default" extends="struts-default">
<action name="register" class="com.example.action.UserAction">
<result name="success">/home.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
এখানে:
- register অ্যাকশনটি UserAction ক্লাসের validate() মেথডের মাধ্যমে ইনপুট ভ্যালিডেশন চেক করবে।
4. Cross-Site Request Forgery (CSRF) Protection
CSRF আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে Struts 2 একটি Token-Based CSRF Protection সাপোর্ট করে, যেখানে ইউজারের রিকোয়েস্টের সাথে একটি টোকেন পাঠানো হয় এবং তা সার্ভারে যাচাই করা হয়।
CSRF Protection উদাহরণ:
Struts 2 SecurityInterceptor ব্যবহার করে CSRF প্রতিরোধ করতে পারে।
<struts>
<package name="secure" extends="struts-default">
<action name="submitForm" class="com.example.action.FormSubmitAction">
<interceptors>
<interceptor-ref name="securityInterceptor"/>
</interceptors>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
এখানে:
- securityInterceptor CSRF আক্রমণ থেকে সুরক্ষা নিশ্চিত করবে এবং ইনপুট ফর্মের সাথে বৈধ টোকেন যাচাই করবে।
5. Cross-Site Scripting (XSS) Protection
XSS আক্রমণ থেকে সুরক্ষা নিশ্চিত করার জন্য, Struts 2-এ HTML encoding ব্যবহার করা যায় যাতে ইউজার ইনপুট সরাসরি HTML হিসেবে রেন্ডার না হয় এবং স্ক্রিপ্টিং আক্রমণ থেকে সুরক্ষিত থাকে।
XSS Protection উদাহরণ:
Struts 2-এ struts.tags ব্যবহার করে ইউজার ইনপুট সুরক্ষিতভাবে প্রদর্শন করা যায়:
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head><title>Safe Form</title></head>
<body>
<h2>Submit Form</h2>
<s:form action="submitForm" method="post">
<s:textfield name="username" label="Username"/>
<s:submit value="Submit"/>
</s:form>
</body>
</html>
এখানে:
- s:textfield এবং অন্যান্য ট্যাগগুলি নিরাপদভাবে ইনপুট গ্রহণ করে এবং XSS আক্রমণ থেকে সুরক্ষা দেয়।
6. Password Hashing
স্ট্রাটস 2 সাধারণত পাসওয়ার্ড স্টোর করার জন্য প্লেইন টেক্সট পাসওয়ার্ড ব্যবহার না করে hashing ব্যবহার করে, যেমন SHA-256 বা BCrypt।
Password Hashing উদাহরণ:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashUtil {
public static String hashPassword(String password) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(password.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
}
}
এখানে:
- SHA-256 পাসওয়ার্ড হ্যাশিংয়ের জন্য ব্যবহৃত হচ্ছে, যা পাসওয়ার্ড স্টোর করার আগে নিরাপদভাবে হ্যাশ করা হয়।
সারাংশ
Struts 2 ফ্রেমওয়ার্কে Security Management ব্যাপক গুরুত্ব দেওয়া হয়। Struts 2 নিরাপত্তার জন্য বিভিন্ন ফিচার যেমন Authentication, Authorization, Input Validation, CSRF Protection, XSS Protection, এবং Password Hashing সমর্থন করে। এই নিরাপত্তা ফিচারগুলি আপনার অ্যাপ্লিকেশনকে আক্রমণকারীদের হাত থেকে সুরক্ষিত রাখতে সাহায্য করে এবং ব্যবহারকারীদের জন্য একটি নিরাপদ পরিবেশ তৈরি করে।
Struts 2 একটি শক্তিশালী ও জনপ্রিয় ফ্রেমওয়ার্ক, যা মডেল-ভিউ-কন্ট্রোলার (MVC) আর্কিটেকচার অনুসরণ করে। যেহেতু এটি ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়, তাই সিকিউরিটি একটি গুরুত্বপূর্ণ বিষয় হয়ে ওঠে। ওয়েব অ্যাপ্লিকেশনগুলি ইন্টারনেটের মাধ্যমে অ্যাক্সেসযোগ্য হয়, যা সেগুলিকে বিভিন্ন ধরনের আক্রমণের শিকার হতে পারে। তাই Struts 2-এ সিকিউরিটি ব্যবস্থা গুরুত্বপূর্ন, যেমন ইউজার অথেনটিকেশন, অথরাইজেশন, ইনপুট ভ্যালিডেশন এবং ক্রস সাইট স্ক্রিপটিং (XSS) প্রতিরোধ করা।
Struts 2 তে সিকিউরিটি নিশ্চিত করার প্রয়োজনীয়তা
- ইউজার অথেনটিকেশন:
- Struts 2 অ্যাপ্লিকেশনগুলোতে ইউজারের পরিচয় নিশ্চিত করার জন্য অথেনটিকেশন ব্যবস্থা থাকতে হবে, যাতে শুধুমাত্র বৈধ ইউজাররা অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে।
- ইউজার অথরাইজেশন:
- শুধুমাত্র অনুমোদিত ইউজাররা নির্দিষ্ট অ্যাকশন বা রিসোর্স অ্যাক্সেস করতে পারে। এটির মাধ্যমে প্রতিটি ইউজারের জন্য অ্যাপ্লিকেশন ব্যবহারের সীমাবদ্ধতা নির্ধারণ করা হয়।
- ইনপুট ভ্যালিডেশন:
- ইউজার ইনপুট থেকে অপ্রত্যাশিত এবং বিপজ্জনক ডেটা ফিল্টার করার জন্য ইনপুট ভ্যালিডেশন খুবই গুরুত্বপূর্ণ। এটি SQL Injection, XSS, এবং অন্যান্য আক্রমণ প্রতিরোধে সাহায্য করে।
- ক্রস সাইট স্ক্রিপটিং (XSS):
- XSS আক্রমণ থেকে বাঁচার জন্য, Struts 2 একটি সুরক্ষিত ফিচার সরবরাহ করে যাতে ইউজারের ইনপুট ডেটা নিরাপদে প্রক্রিয়া করা যায়। বিশেষ করে, Struts 2-এর OGNL (Object-Graph Navigation Language) ইনপুটে স্ক্রিপ্ট বা ম্যালিশিয়াস কোড প্রবেশ করানোর জন্য সুরক্ষা ব্যবস্থা প্রদান করে।
- CRSF (Cross-Site Request Forgery) প্রতিরোধ:
- ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে একটি জনপ্রিয় আক্রমণ হল CRSF। Struts 2 এর মাধ্যমে Token-based সুরক্ষা প্রয়োগ করে CRSF আক্রমণ থেকে রক্ষা পাওয়া যায়।
Struts 2 তে সিকিউরিটি বাস্তবায়নের জন্য প্রধান পদক্ষেপ
- ফর্ম ভ্যালিডেশন এবং ইনপুট ভ্যালিডেশন:
- Struts 2 এর ValidationInterceptor ব্যবহার করে ইনপুট ভ্যালিডেশন এবং ফর্ম ভ্যালিডেশন সিস্টেম বাস্তবায়িত করা যায়।
- XSS (Cross-site Scripting) প্রতিরোধ:
- Struts 2 নিজস্ব OGNL সুরক্ষা ব্যবস্থা দিয়ে স্ক্রিপ্ট ইনজেকশন এবং ম্যালিশিয়াস কোড প্রতিরোধ করে।
- CRSF (Cross-Site Request Forgery) প্রতিরোধ:
- Struts 2 এর Token-based নিরাপত্তা ব্যবস্থা ব্যবহার করা যেতে পারে যাতে প্রতিটি রিকোয়েস্টের সাথে একটি সিকিউরিটি টোকেন পাঠানো হয়।
- অথেনটিকেশন ও অথরাইজেশন:
- Struts 2 এ Basic Authentication বা Form-Based Authentication ব্যবহার করা যেতে পারে। এছাড়া, Role-based Authorization সিস্টেম বাস্তবায়ন করা হয়, যা শুধুমাত্র অনুমোদিত ইউজারদের নির্দিষ্ট অ্যাকশন বা রিসোর্স অ্যাক্সেস করতে দেয়।
Struts 2 তে সিকিউরিটি বাস্তবায়নের উদাহরণ
১. ইনপুট ভ্যালিডেশন
UserAction.java (Action ক্লাস):
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String username;
private String password;
// ইনপুট ভ্যালিডেশন অ্যানোটেশন
public void validate() {
if (username == null || username.trim().isEmpty()) {
addFieldError("username", "Username is required");
}
if (password == null || password.trim().isEmpty()) {
addFieldError("password", "Password is required");
}
}
public String execute() {
// যদি কোনো ত্রুটি না থাকে
if (hasErrors()) {
return INPUT;
}
return SUCCESS;
}
// Getter and Setter methods
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
ব্যাখ্যা:
validate()মেথডে ইনপুট ফিল্ডগুলির জন্য সঠিকতা যাচাই করা হয়।- addFieldError() পদ্ধতি ব্যবহার করে, যদি ইউজার নাম বা পাসওয়ার্ড ফাঁকা থাকে, তাহলে ত্রুটি বার্তা দেখানো হবে।
২. XSS প্রতিরোধ
Struts 2 তে OGNL সুরক্ষা ব্যবস্থার মাধ্যমে XSS আক্রমণ থেকে সুরক্ষা পাওয়া যায়। <s:property> ট্যাগ ব্যবহার করার মাধ্যমে কোনো স্ক্রিপ্ট ইনজেকশন থেকে রক্ষা পাওয়া যায়।
hello.jsp:
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<h2><s:property value="username" /></h2>
</body>
</html>
ব্যাখ্যা:
- <s:property> ট্যাগ ব্যবহার করার মাধ্যমে, Struts 2 ইউজার ইনপুট ডেটা সঠিকভাবে রেন্ডার করে, যা XSS আক্রমণ থেকে সুরক্ষা প্রদান করে।
৩. CSRF (Cross-Site Request Forgery) প্রতিরোধ
Struts 2 তে CSRF প্রতিরোধ করার জন্য Token-based সুরক্ষা ব্যবস্থার ব্যবহার করা হয়।
struts.xml:
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.example.LoginAction">
<interceptor-ref name="token">
<param name="excludeMethods">input,success</param>
</interceptor-ref>
<result name="success">/home.jsp</result>
</action>
</package>
ব্যাখ্যা:
- এখানে token ইন্টারসেপ্টর ব্যবহার করা হয়েছে, যা CSRF আক্রমণ থেকে অ্যাপ্লিকেশন সুরক্ষিত রাখে।
- excludeMethods প্যারামিটার ব্যবহার করে টোকেন প্রক্রিয়াগুলি নির্দিষ্ট কিছু মেথডের জন্য নিষ্ক্রিয় করা হয়।
৪. অথেনটিকেশন এবং অথরাইজেশন
Struts 2-এ Basic Authentication এবং Form-based Authentication ব্যবহার করা যেতে পারে। আপনি struts.xml ফাইল এবং web.xml ফাইলে নিরাপত্তা কনফিগারেশন করতে পারেন।
struts.xml:
<package name="default" namespace="/" extends="struts-default">
<action name="welcome" class="com.example.WelcomeAction">
<result>/welcome.jsp</result>
</action>
</package>
web.xml (Basic Authentication):
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Resources</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My App</realm-name>
</login-config>
</web-app>
ব্যাখ্যা:
- এখানে Basic Authentication ব্যবহৃত হয়েছে, যেখানে admin রোল ছাড়া অন্য কোনো রোল এই রিসোর্স অ্যাক্সেস করতে পারবে না।
সারাংশ
Struts 2 তে সিকিউরিটি খুবই গুরুত্বপূর্ণ। ইনপুট ভ্যালিডেশন, XSS, CSRF প্রতিরোধ, এবং অথেনটিকেশন/অথরাইজেশন ইত্যাদি সিকিউরিটি ব্যবস্থা Struts 2 অ্যাপ্লিকেশনগুলোকে সুরক্ষিত রাখতে সাহায্য করে। Struts 2 ফ্রেমওয়ার্কে নিরাপত্তা ব্যবস্থার সঠিক কনফিগারেশন এবং সঠিক টুলস ব্যবহার করে আপনি নিরাপদ, স্কেলেবল এবং রক্ষণাবেক্ষণযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন।
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 নিরাপত্তা চেকগুলো সার্বিকভাবে পরিচালনা করে, যেমন সেশন ভ্যালিডেশন, এক্সেস কন্ট্রোল ইত্যাদি।
এই দুটি স্তরের নিরাপত্তা কনফিগারেশন ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং সুরক্ষিত করতে পারেন।
Struts 2 ফ্রেমওয়ার্ক ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত একটি শক্তিশালী ফ্রেমওয়ার্ক। নিরাপত্তা (Security) হল ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ একটি অংশ। Struts 2 আপনাকে নিরাপত্তা ব্যবস্থাপনা সহজভাবে পরিচালনা করার জন্য বিভিন্ন টুল এবং কনফিগারেশন সরবরাহ করে। এর মাধ্যমে আপনি অথেন্টিকেশন, অথরাইজেশন, ফর্ম ভ্যালিডেশন, এবং সেশন ম্যানেজমেন্ট খুব সহজে ইমপ্লিমেন্ট করতে পারেন।
Struts 2 তে Security Management এর প্রধান বৈশিষ্ট্য
- Authentication: ইউজারকে লগ ইন করার জন্য যাচাই করা।
- Authorization: ইউজারের জন্য বিভিন্ন ভূমিকা (role) নির্ধারণ এবং রিসোর্স অ্যাক্সেস নিয়ন্ত্রণ।
- Session Management: সেশন পরিচালনা, যেমন সেশন টাইম আউট এবং সেশন হাইজ্যাকিং প্রতিরোধ।
- Input Validation: ইউজার ইনপুট সঠিকভাবে যাচাই করা।
- Interceptors: নিরাপত্তা যাচাইয়ের জন্য Struts 2 Interceptors ব্যবহার করা।
Struts 2 এ Security Management এর উপায়
Struts 2 ফ্রেমওয়ার্কে নিরাপত্তা ব্যবস্থাপনার জন্য সাধারণত Interceptors, Filters, এবং Action classes ব্যবহৃত হয়। নিচে একটি সিম্পল উদাহরণ দিয়ে দেখানো হলো কীভাবে নিরাপত্তা ব্যবস্থাপনা করা যায়।
উদাহরণ: Struts 2 এ Authentication এবং Authorization
ধরা যাক, একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা হচ্ছে যেখানে ব্যবহারকারীদের লগইন করতে হবে এবং নির্দিষ্ট ভূমিকার (role) ভিত্তিতে তাদের অ্যাক্সেস প্রদান করা হবে।
1. Authentication and Authorization Action Class
package com.example;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
// Getter and Setter for username and password
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// Execute method for authentication
public String execute() {
if ("admin".equals(username) && "password123".equals(password)) {
// Successful login
return SUCCESS;
} else {
// Failed login
return ERROR;
}
}
}
এখানে, LoginAction ক্লাসে ইউজারের username এবং password যাচাই করা হচ্ছে। যদি ব্যবহারকারীর ইনপুট সঠিক হয়, তবে SUCCESS রিটার্ন হবে, অন্যথায় ERROR রিটার্ন হবে।
2. struts.xml (Action Mapping)
<struts>
<package name="default" extends="struts-default">
<action name="login" class="com.example.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
এখানে, login অ্যাকশনটি LoginAction ক্লাসের সাথে সম্পর্কিত। SUCCESS রিটার্ন করলে ব্যবহারকারীকে welcome.jsp পৃষ্ঠায় পাঠানো হবে, এবং ERROR রিটার্ন হলে login.jsp পৃষ্ঠায় ফিরিয়ে নেওয়া হবে।
3. JSP File for Login (login.jsp)
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<h2>Please enter your credentials:</h2>
<s:form action="login">
<s:textfield name="username" label="Username" />
<s:password name="password" label="Password" />
<s:submit value="Login" />
</s:form>
</body>
</html>
এখানে একটি সিম্পল login.jsp পৃষ্ঠা তৈরি করা হয়েছে যেখানে ইউজার নাম এবং পাসওয়ার্ড ইনপুট ফিল্ড রয়েছে। ইউজার submit বাটনে ক্লিক করলে রিকোয়েস্ট login অ্যাকশনে যাবে।
4. JSP File for Welcome Page (welcome.jsp)
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h2>Welcome to the dashboard!</h2>
</body>
</html>
এখানে একটি সিম্পল welcome.jsp পৃষ্ঠা তৈরি করা হয়েছে যা সফল লগইনের পর দেখানো হবে।
5. Error Page (error.jsp)
<html>
<head>
<title>Error</title>
</head>
<body>
<h2>Error: Invalid username or password</h2>
</body>
</html>
এটি একটি error.jsp পৃষ্ঠা যা লগইন ফেইল হলে দেখানো হবে।
Struts 2 Interceptor দিয়ে Authorization এবং Security
Struts 2 এ Interceptors নিরাপত্তা যাচাই এবং অন্যান্য ক্রস-কাটিং কনসার্ন (যেমন, লগিং, অথরাইজেশন) পরিচালনার জন্য ব্যবহৃত হয়। আমরা SecurityInterceptor ব্যবহার করে একটি কাস্টম অথরাইজেশন যাচাই করতে পারি।
6. Security Interceptor
package com.example;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class SecurityInterceptor implements Interceptor {
@Override
public void destroy() {
// Cleanup resources
}
@Override
public void init() {
// Initialize resources
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// Security check: User authentication verification
String userRole = (String) invocation.getInvocationContext().getSession().get("role");
if (userRole == null || !userRole.equals("admin")) {
// Unauthorized access
return "unauthorized";
}
// Proceed with the action
return invocation.invoke();
}
}
এখানে SecurityInterceptor তৈরি করা হয়েছে যা রিকোয়েস্ট প্রোসেসিংয়ের আগে ইউজারের role চেক করবে। যদি ইউজারের রোল admin না হয়, তবে "unauthorized" রিটার্ন হবে।
7. struts.xml (Interceptor Configuration)
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="securityInterceptor" class="com.example.SecurityInterceptor" />
</interceptors>
<action name="secureAction" class="com.example.SecureAction">
<interceptor-ref name="securityInterceptor"/>
<result name="unauthorized">/unauthorized.jsp</result>
<result name="success">/securePage.jsp</result>
</action>
</package>
</struts>
এখানে, securityInterceptor কনফিগার করা হয়েছে এবং secureAction এর জন্য এটি ব্যবহৃত হবে। যদি ইউজার অনুমোদিত না হয়, তবে unauthorized.jsp পৃষ্ঠায় পাঠানো হবে।
8. Unauthorized Page (unauthorized.jsp)
<html>
<head>
<title>Unauthorized</title>
</head>
<body>
<h2>Unauthorized access. You do not have the required permissions.</h2>
</body>
</html>
এটি unauthorized.jsp পৃষ্ঠা যা অবৈধ অ্যাক্সেস হলে দেখানো হবে।
সারাংশ
Struts 2 ফ্রেমওয়ার্কে নিরাপত্তা ব্যবস্থাপনা (Authentication এবং Authorization) সহজে করা যায়। Action classes এবং Interceptors ব্যবহার করে আপনি ইউজার লেভেল সিকিউরিটি যাচাই করতে পারেন, যেমন ইউজারের রোল চেক করা, লগইন যাচাই করা এবং সেশন পরিচালনা করা। এছাড়া, Struts 2 এর Interceptors নিরাপত্তা যাচাইয়ের জন্য খুবই উপকারী, যা রিকোয়েস্ট প্রোসেসিংয়ের আগে বা পরে কাজ করতে পারে।
Read more