Java Technologies উদাহরণ সহ Form-Based Authentication গাইড ও নোট

310

Form-Based Authentication হলো Spring Security-তে একটি জনপ্রিয় Authentication প্রক্রিয়া, যেখানে ব্যবহারকারী একটি কাস্টম লগইন ফর্ম ব্যবহার করে অ্যাপ্লিকেশনে লগইন করতে পারে। এটি REST API এবং Web Applications উভয়ের জন্য প্রযোজ্য।


Form-Based Authentication সেটআপ করার ধাপসমূহ:


Step 1: প্রজেক্ট তৈরি

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

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

    <!-- Thymeleaf (ফর্ম টেম্পলেটের জন্য) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

Step 2: Spring Security Configuration

@EnableWebSecurity ব্যবহার করে কাস্টম কনফিগারেশন তৈরি করুন।

SecurityConfig ক্লাস:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/login", "/resources/**", "/css/**").permitAll() // Login পেজ এবং স্ট্যাটিক ফাইল ফ্রি
            .anyRequest().authenticated() // অন্য সব রিকোয়েস্ট প্রোটেক্টেড
            .and()
            .formLogin()
            .loginPage("/login") // Custom login পেজ
            .defaultSuccessUrl("/home", true) // লগইন সফল হলে
            .permitAll()
            .and()
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login?logout")
            .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}password") // No password encoding (development only)
            .roles("USER")
            .and()
            .withUser("admin")
            .password("{noop}admin")
            .roles("ADMIN");
    }
}

Step 3: কাস্টম লগইন পেজ তৈরি

Spring Boot ডিফল্ট লগইন ফর্ম ব্যবহার না করে কাস্টম লগইন পেজ ব্যবহার করা হবে।

login.html (Thymeleaf Template):

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

Step 4: হোম পেজ তৈরি

লগইন সফল হলে ব্যবহারকারীকে /home রিডাইরেক্ট করা হবে।

home.html (Thymeleaf Template):

<!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>
    <form th:action="@{/logout}" method="post">
        <button type="submit">Logout</button>
    </form>
</body>
</html>

Step 5: Controller তৈরি

Spring MVC কন্ট্রোলার ব্যবহার করে /login এবং /home পেজ পরিচালনা করা হবে।

LoginController:

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

@Controller
public class LoginController {

    @GetMapping("/login")
    public String login() {
        return "login"; // login.html টেম্পলেট রিটার্ন করবে
    }

    @GetMapping("/home")
    public String home() {
        return "home"; // home.html টেম্পলেট রিটার্ন করবে
    }
}

Step 6: Static Resources (CSS ফাইল যুক্ত করা)

style.css:

body {
    font-family: Arial, sans-serif;
    margin: 20px;
}

form {
    margin-top: 20px;
}

button {
    background-color: #4CAF50;
    color: white;
    padding: 10px 20px;
    border: none;
    cursor: pointer;
}

button:hover {
    background-color: #45a049;
}

স্ট্যাটিক ফাইলের জন্য:

ফাইলটি src/main/resources/static/css/style.css এ রাখুন।


Step 7: অ্যাপ্লিকেশন চালু করুন

  1. অ্যাপ চালু করুন:

    mvn spring-boot:run
    
  2. অ্যাক্সেস URL:
    • লগইন পেজ: http://localhost:8080/login
    • লগইন করার জন্য:
      • Username: user
      • Password: password

Spring Security Workflow:

  1. /login রিকোয়েস্ট করলে কাস্টম লগইন পেজ দেখা যাবে।
  2. সঠিক ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করলে /home এ রিডাইরেক্ট হবে।
  3. লগআউট করার জন্য /logout রিকোয়েস্ট করলে /login?logout পেজে রিডাইরেক্ট হবে।

উপসংহার:

এই উদাহরণটি একটি মৌলিক Spring Security প্রজেক্টের কাস্টম Form-Based Authentication কনফিগারেশন প্রদর্শন করে। এটি Spring Security-এর আরও উন্নত বৈশিষ্ট্য যেমন ডাটাবেস-ভিত্তিক Authentication, OAuth2 Integration, এবং JWT এর মতো ফিচার শেখার জন্য একটি ভিত্তি হিসেবে কাজ করবে।

Content added By
Promotion

Are you sure to start over?

Loading...