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