উদাহরণ সহ Spring Security সেটআপ

Spring Security - স্প্রিং (Spring) - Java Technologies

311

Spring Security একটি শক্তিশালী এবং অত্যন্ত কনফিগারেবল ফ্রেমওয়ার্ক যা জাভা অ্যাপ্লিকেশনগুলিতে সিকিউরিটি প্রদান করতে ব্যবহৃত হয়। এটি authentication (অথেনটিকেশন) এবং authorization (অথোরাইজেশন) সাপোর্ট করে, যা ওয়েব অ্যাপ্লিকেশনগুলির সুরক্ষা নিশ্চিত করতে সাহায্য করে। Spring Security ফ্রেমওয়ার্ক সাধারণত ইউজার লগইন, লগআউট, রোল-ভিত্তিক এক্সেস কন্ট্রোল, সেশন ম্যানেজমেন্ট, ক্রস সাইট রিকোয়েস্ট ফরগারি (CSRF) সুরক্ষা ইত্যাদি সিকিউরিটি ফিচার সরবরাহ করে।

Spring Security সেটআপ করার জন্য কয়েকটি ধাপ অনুসরণ করতে হবে। এখানে একটি সাধারণ Spring Security সেটআপের উদাহরণ দেওয়া হলো।


১. Spring Security Dependency যোগ করা

প্রথমে আপনার pom.xml (Maven project) বা build.gradle (Gradle project) ফাইলে Spring Security ডিপেনডেন্সি যোগ করতে হবে।

pom.xml (Maven)

<dependencies>
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- Spring Boot starter web for REST API support -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

build.gradle (Gradle)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

২. Spring Security Configuration Class

Spring Security কনফিগার করতে একটি কনফিগারেশন ক্লাস তৈরি করতে হবে যেখানে আপনি authentication এবং authorization কনফিগার করবেন।

package com.example.config;

import org.springframework.context.annotation.Bean;
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;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.memory.InMemoryUserDetailsManager;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login").permitAll()    // Allow access to the login page
                .anyRequest().authenticated()        // All other requests require authentication
            .and()
            .formLogin()
                .loginPage("/login")                   // Custom login page URL
                .permitAll()                            // Allow everyone to access the login page
            .and()
            .logout()
                .permitAll();                          // Allow logout for everyone
    }

    // In-memory user details service with a simple user
    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("user").password(passwordEncoder().encode("password")).roles("USER").build());
        manager.createUser(User.withUsername("admin").password(passwordEncoder().encode("admin")).roles("ADMIN").build());
        return manager;
    }

    // Password encoder to hash passwords
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

ব্যাখ্যা:

  • @EnableWebSecurity: Spring Security কে সক্রিয় করার জন্য ব্যবহৃত হয়।
  • HttpSecurity: HTTP রিকোয়েস্ট কনফিগার করার জন্য ব্যবহৃত হয়। এখানে আমরা /login পেজকে permitAll() দিয়ে উন্মুক্ত করেছি, অন্যথায় সব রিকোয়েস্টে অথেনটিকেশন প্রয়োজন।
  • formLogin(): এখানে আমরা কাস্টম লগিন পেজ এবং ফর্ম লগিন কনফিগার করেছি।
  • InMemoryUserDetailsManager: একটি ইন-মেমরি ইউজার ডেটাবেসের জন্য ব্যবহৃত হয়, যেখানে ইউজারনেম, পাসওয়ার্ড, এবং রোলস কনফিগার করা হয়েছে।

৩. Custom Login Page (Optional)

Spring Security ডিফল্ট লগিন পেজ প্রদান করে, তবে আপনি চাইলে একটি কাস্টম লগিন পেজও তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি login.html ফাইল তৈরি করতে পারেন।

login.html (Custom Login Page)

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login Page</h2>
    <form action="/login" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        
        <button type="submit">Login</button>
    </form>
</body>
</html>

ব্যাখ্যা:

  • এখানে একটি সিম্পল HTML ফর্ম তৈরি করা হয়েছে যেটি /login URL এ POST রিকোয়েস্ট পাঠাবে।
  • Spring Security নিজেই লগইন প্রক্রিয়া হ্যান্ডল করবে।

৪. Controller Example

এখন, UserController ক্লাস তৈরি করে একটি সিম্পল প্রাইভেট এবং পাবলিক পেজ তৈরি করা যাক। এটি দেখাবে কিভাবে authentication এবং authorization কাজ করে।

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @GetMapping("/home")
    public String homePage() {
        return "home";  // Displays home page (view)
    }

    @GetMapping("/admin")
    public String adminPage() {
        return "admin";  // Displays admin page (view)
    }

    @GetMapping("/login")
    public String loginPage() {
        return "login";  // Displays custom login page
    }
}

৫. Views for Pages (Home and Admin)

Spring Security এক্সেস কন্ট্রোলের ভিত্তিতে আপনার পেজগুলো বিভিন্ন রোল অনুযায়ী সুরক্ষিত করে। এজন্য, আপনাকে দুটি HTML পেজ তৈরি করতে হবে:

home.html (Home Page)

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h2>Welcome to the Home Page</h2>
    <a href="/admin">Go to Admin Page</a>
</body>
</html>

admin.html (Admin Page)

<!DOCTYPE html>
<html>
<head>
    <title>Admin</title>
</head>
<body>
    <h2>Welcome to the Admin Page</h2>
    <a href="/home">Go to Home Page</a>
</body>
</html>

৬. Spring Boot Application

Spring Boot অ্যাপ্লিকেশন রান করতে, আপনি একটি সাধারণ main class তৈরি করতে পারেন:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringSecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringSecurityApplication.class, args);
    }
}

৭. Output

  1. Home Page (/home) শুধুমাত্র লগিন করা ইউজারদের জন্য প্রবেশযোগ্য।
  2. Admin Page (/admin) শুধুমাত্র ADMIN রোলধারী ইউজারদের জন্য প্রবেশযোগ্য।
  3. আপনি যদি ইউজার হিসেবে লগ ইন না করেন তবে login পেজে রিডাইরেক্ট করা হবে।

সারাংশ

Spring Security ব্যবহার করে আপনি সহজেই আপনার অ্যাপ্লিকেশনের সিকিউরিটি কনফিগার করতে পারেন। এটি ইউজার অথেনটিকেশন এবং অথোরাইজেশন ম্যানেজমেন্ট, কাস্টম লগিন পেজ, সেশন ম্যানেজমেন্ট এবং অন্যান্য সিকিউরিটি ফিচার সরবরাহ করে। Spring Security-র মাধ্যমে form-based authentication এবং role-based authorization সহজেই বাস্তবায়িত করা যায়, এবং আপনি বিভিন্ন ভিউ রেজল্যুশন এবং কাস্টম লগিন পেজ তৈরি করতে পারেন। Spring Boot এবং Spring Security এর সমন্বয়ে সিকিউরিটি কার্যক্রম সোজা এবং দ্রুততার সাথে কার্যকরী করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...