Java Technologies Concurrent Session Control এবং Session Timeout Management গাইড ও নোট

281

Concurrent Session Control এবং Session Timeout Management দুটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য, যা অ্যাপ্লিকেশনগুলিকে ব্যবহারকারীর সেশন পরিচালনা এবং সেশন নিরাপত্তা নিশ্চিত করতে সাহায্য করে। Spring Security এই দুটি বৈশিষ্ট্যকে সঠিকভাবে কনফিগার করতে সাহায্য করে, যাতে ব্যবহারকারীদের একাধিক সেশন তৈরি হওয়া বা অবাঞ্ছিতভাবে সেশন চলতে থাকা থেকে রক্ষা করা যায়।


1. Concurrent Session Control

Concurrent Session Control এর মাধ্যমে একটি ব্যবহারকারী একাধিক সেশনে লগইন করতে পারে কি না, তা নিয়ন্ত্রণ করা হয়। যদি আপনি চান যে একটি ব্যবহারকারী শুধুমাত্র একটিই সেশনে লগইন করতে পারবে, তাহলে Spring Security আপনাকে সেটি কনফিগার করার সুযোগ দেয়।

Concurrent Session Control কনফিগারেশন

Spring Security-তে concurrent session control কনফিগার করতে HttpSecurity ব্যবহার করা হয়, যা একাধিক সেশন বন্ধ করতে সাহায্য করে।

Step 1: Maven ডিপেনডেন্সি

Spring Security-তে Concurrent Session Control ব্যবহার করার জন্য আপনাকে প্রথমে spring-boot-starter-security ডিপেনডেন্সি প্রয়োজন।

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Step 2: Session Control কনফিগারেশন

Spring Security-তে Concurrent Session Control সক্ষম করতে SessionManagementConfigurer ব্যবহার করা হয়।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login", "/register").permitAll() // Login ও Register পেজের জন্য কোন সেশন কন্ট্রোল প্রয়োজন নেই
                .anyRequest().authenticated() // বাকি সব অ্যাক্সেসের জন্য অথেন্টিকেশন প্রয়োজন
            .and()
            .sessionManagement()
                .maximumSessions(1) // শুধুমাত্র একটি concurrent সেশন অনুমোদিত
                .expiredUrl("/session-expired") // সেশন এক্সপায়ার হলে কোন URL তে রিডাইরেক্ট হবে
                .and()
            .invalidSessionUrl("/invalid-session"); // অবৈধ সেশনের জন্য নির্দিষ্ট URL
    }
}
ব্যাখ্যা:
  • maximumSessions(1): এক ব্যবহারকারী শুধুমাত্র একটিই সেশনে লগইন করতে পারবে।
  • expiredUrl("/session-expired"): যখন সেশন এক্সপায়ার হয়, তখন ব্যবহারকারীকে এই URL এ রিডাইরেক্ট করা হবে।
  • invalidSessionUrl("/invalid-session"): যখন অবৈধ সেশন হয় (যেমন সেশন টাইমআউট), তখন ব্যবহারকারীকে এই URL তে পাঠানো হবে।

Step 3: Session Expiry ও Invalid Session URL কনফিগারেশন

এটি অতিরিক্ত কনফিগারেশন যা সেশন এক্সপায়ার হলে বা অবৈধ হলে ব্যবহারকারীকে কোথায় রিডাইরেক্ট করা হবে তা নির্ধারণ করতে সাহায্য করবে।

@Controller
public class SessionController {

    @GetMapping("/session-expired")
    public String sessionExpired() {
        return "Your session has expired. Please log in again.";
    }

    @GetMapping("/invalid-session")
    public String invalidSession() {
        return "Invalid session. Please log in again.";
    }
}

2. Session Timeout Management

Session Timeout হল একটি নিরাপত্তা ব্যবস্থা যা সেশন নির্দিষ্ট সময় পরে স্বয়ংক্রিয়ভাবে শেষ করে দেয়। এটি একটি নির্দিষ্ট সময় পর ব্যবহারকারী যদি কোন অ্যাকশন না করেন, তবে সেশন অটোমেটিকভাবে শেষ হয়ে যাবে।

Session Timeout Management কনফিগারেশন

Spring Security তে সেশন টাইমআউট কনফিগার করার জন্য, আপনাকে HttpSecurity এর মধ্যে sessionManagement() কনফিগার করতে হবে। এখানে sessionTimeout() ব্যবহার করে আপনি সেশনের টাইমআউট নির্ধারণ করতে পারবেন।

Step 1: Session Timeout কনফিগারেশন
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login", "/register").permitAll()
                .anyRequest().authenticated()
            .and()
            .sessionManagement()
                .invalidSessionUrl("/invalid-session") // অবৈধ সেশন হলে নির্দিষ্ট URL তে রিডাইরেক্ট করবে
                .sessionFixation().newSession() // সেশন ফিক্সেশন এটাক রোধ করবে
                .maximumSessions(1) // একাধিক সেশন অনুমোদিত নয়
                .expiredUrl("/session-expired") // সেশন এক্সপায়ার হলে রিডাইরেক্ট URL
                .and()
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // সেশন তৈরির নীতি
            .and()
            .logout().permitAll();
    }
}
Step 2: Session Timeout Handler

Spring Boot এ আপনি session-timeout কনফিগারেশনও করতে পারেন application.properties ফাইলের মাধ্যমে।

server.servlet.session.timeout=15m # সেশন টাইমআউট 15 মিনিট

এই কনফিগারেশনটি 15 মিনিট পর সেশন টাইমআউট হয়ে যাবে, অর্থাৎ, ব্যবহারকারী কোন কার্যকলাপ না করলে 15 মিনিট পর তাদের সেশন স্বয়ংক্রিয়ভাবে শেষ হয়ে যাবে।


Step 3: Session Timeout URL কনফিগারেশন

@Controller
public class TimeoutController {

    @GetMapping("/session-expired")
    public String sessionExpired() {
        return "Your session has expired. Please log in again.";
    }

    @GetMapping("/invalid-session")
    public String invalidSession() {
        return "Invalid session. Please log in again.";
    }
}

Concurrent Session Control এবং Session Timeout-এর সুবিধা

  1. নিরাপত্তা বৃদ্ধি:
    • একাধিক সেশন অনুমোদন না দেয়ার মাধ্যমে Session Fixation আক্রমণ থেকে সুরক্ষা পাওয়া যায়।
    • Session Timeout ব্যবহারের মাধ্যমে সেশন চুরি এবং অবৈধ অ্যাক্সেস রোধ করা হয়।
  2. ব্যবহারকারীর নিয়ন্ত্রণ:
    • ব্যবহারকারীরা কখন সেশন শেষ হবে তা সম্পর্কে অবহিত থাকে এবং সেশন পরিচালনার ক্ষেত্রে আরও সুবিধা পায়।
  3. সেশন ক্লিনআপ:
    • সেশন টাইমআউট ব্যবহারের ফলে অপ্রয়োজনীয় সেশন ক্লিনআপ হয়, যা সিস্টেমের রিসোর্স সাশ্রয় করে।

উপসংহার

Concurrent Session Control এবং Session Timeout Management দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনার অ্যাপ্লিকেশনকে নিরাপদ রাখতে সহায়ক। Spring Security এই বৈশিষ্ট্যগুলো সহজে কনফিগার করতে দেয়, যাতে আপনি একাধিক সেশন প্রবাহ নিয়ন্ত্রণ করতে পারেন এবং অবাঞ্ছিত সেশনগুলি স্বয়ংক্রিয়ভাবে বন্ধ করতে পারেন। এটি বিশেষ করে নিরাপত্তা বাড়াতে এবং সিস্টেমের সম্পদ সঠিকভাবে ব্যবহৃত হতে নিশ্চিত করতে গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...