Form-Based Authentication কি এবং এর প্রয়োগ

Spring Security এর Form-Based Authentication - স্প্রিং সিকিউরিটি (Spring Security) - Java Technologies

303

Form-Based Authentication হল Spring Security-তে একটি অথেন্টিকেশন পদ্ধতি যেখানে ব্যবহারকারী তাদের পরিচয় (ইউজারনেম এবং পাসওয়ার্ড) একটি কাস্টম HTML ফর্মের মাধ্যমে প্রদান করে। এটি ডিফল্ট HTTP Basic Authentication-এর চেয়ে বেশি ব্যবহারকারী-বান্ধব এবং নিরাপত্তা এবং কাস্টমাইজেশনের সুযোগ প্রদান করে।


Form-Based Authentication-এর বৈশিষ্ট্য

  1. Custom Login Form: ব্যবহারকারী নিজের লগইন পৃষ্ঠা তৈরি করতে পারে।
  2. Session Management: অথেন্টিকেশন সফল হলে ব্যবহারকারী সেশনে ধরে রাখা হয়।
  3. Redirection: সঠিক অথেন্টিকেশনের পরে ব্যবহারকারীকে নির্দিষ্ট পৃষ্ঠায় পুনঃনির্দেশিত করা যায়।
  4. Remember Me: লগইন স্টেট ধরে রাখা যায়।

Spring Security-তে Form-Based Authentication প্রয়োগ

ধাপ ১: Maven ডিপেনডেন্সি যোগ করুন

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

ধাপ ২: Spring Security কনফিগারেশন তৈরি করুন

Spring Security-তে Form-Based Authentication সেটআপ করার জন্য SecurityFilterChain ব্যবহার করা হয়।

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.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login", "/resources/**").permitAll() // Public URLs
                .anyRequest().authenticated() // Other URLs require authentication
            )
            .formLogin(form -> form
                .loginPage("/login") // Custom login page URL
                .defaultSuccessUrl("/home", true) // Redirect after successful login
                .failureUrl("/login?error=true") // Redirect on login failure
                .permitAll()
            )
            .logout(logout -> logout
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout=true")
                .permitAll()
            );
        return http.build();
    }
}

ধাপ ৩: ইন-মেমরি ইউজার ডেটা যোগ করুন

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class InMemoryUserConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsManager() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("admin")
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

ধাপ ৪: Custom Login পৃষ্ঠা তৈরি করুন

src/main/resources/templates/login.html ফাইল তৈরি করুন।

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form th:action="@{/login}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" />
        <br />
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" />
        <br />
        <button type="submit">Login</button>
    </form>
    <p th:if="${param.error}" style="color: red;">Invalid username or password.</p>
    <p th:if="${param.logout}" style="color: green;">You have been logged out.</p>
</body>
</html>

ধাপ ৫: প্রাইভেট পৃষ্ঠা তৈরি করুন

src/main/resources/templates/home.html ফাইল তৈরি করুন।

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
</head>
<body>
    <h1>Welcome to Home Page</h1>
    <p>You are successfully logged in!</p>
    <a th:href="@{/logout}">Logout</a>
</body>
</html>

ধাপ ৬: Controller তৈরি করুন

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

@Controller
public class AppController {

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

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

Spring Security Form-Based Authentication এর বৈশিষ্ট্য

  1. Customizable: কাস্টম লগইন পেজ, সফল/ব্যর্থ লগইনের পরে পুনঃনির্দেশনা।
  2. Security: ডিফল্ট সিকিউরিটি ফিচার যেমন পাসওয়ার্ড এনকোডিং।
  3. Session Management: লগইন সেশনের সঠিক ব্যবস্থাপনা।
  4. Error Handling: লগইন ব্যর্থ হলে কাস্টম মেসেজ প্রদর্শন।

প্রজেক্ট রান করা এবং পরীক্ষা

  1. অ্যাপ্লিকেশনটি চালু করুন:

    mvn spring-boot:run
    
  2. ব্রাউজারে http://localhost:8080/login URL-এ যান।
  3. লগইন করার জন্য নিচের ক্রেডেনশিয়াল ব্যবহার করুন:
    • Username: user
    • Password: password

উপসংহার

Spring Security-তে Form-Based Authentication একটি ব্যবহারকারী-বান্ধব অথেন্টিকেশন পদ্ধতি। এটি ব্যবহারকারীদের সহজেই অথেন্টিকেশন প্রদান করে এবং ওয়েব অ্যাপ্লিকেশনে উচ্চ সুরক্ষা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...