@PreAuthorize, @Secured এর মাধ্যমে Access Control

Spring Security Integration - স্প্রিং এমভিসি (Spring MVC) - Java Technologies

295

Spring Security তে access control করতে আমরা @PreAuthorize এবং @Secured অ্যানোটেশন ব্যবহার করতে পারি। এই অ্যানোটেশনগুলি মেথড লেভেলে ব্যবহার করা হয়, যার মাধ্যমে নির্দিষ্ট রোল বা অনুমতির ভিত্তিতে রিকোয়েস্টের অ্যাক্সেস কন্ট্রোল করা যায়।


1. @Secured অ্যানোটেশন

@Secured অ্যানোটেশনটি Spring Security-তে ব্যবহারকারীর রোল (roles) অনুযায়ী মেথড অ্যাক্সেস কন্ট্রোল করার জন্য ব্যবহৃত হয়। এই অ্যানোটেশনটি মেথডের আগে ব্যবহার করা হয়, যা একটি নির্দিষ্ট রোলের অধিকারী ব্যবহারকারী ছাড়া অন্যদের অ্যাক্সেস বন্ধ করে।

@Secured Example:

import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Secured("ROLE_ADMIN")
    public void deleteUser() {
        System.out.println("Admin deleted the user.");
    }

    @Secured({"ROLE_USER", "ROLE_ADMIN"})
    public void viewUser() {
        System.out.println("User details viewed.");
    }
}
  • @Secured("ROLE_ADMIN"): এটি নিশ্চিত করে যে শুধুমাত্র ROLE_ADMIN রোলধারী ব্যবহারকারী deleteUser() মেথডটি অ্যাক্সেস করতে পারবে।
  • @Secured({"ROLE_USER", "ROLE_ADMIN"}): এটি ROLE_USER এবং ROLE_ADMIN রোলধারী উভয় ব্যবহারকারীকে viewUser() মেথডে অ্যাক্সেস প্রদান করবে।

Configuring Spring Security for @Secured

Spring Security তে @Secured অ্যানোটেশন ব্যবহার করার জন্য @EnableGlobalMethodSecurity কনফিগারেশন প্রয়োজন।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)  // Enable @Secured
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // Security configuration
}

2. @PreAuthorize অ্যানোটেশন

@PreAuthorize অ্যানোটেশনটি একটি শক্তিশালী এবং নমনীয় পদ্ধতি, যা Spring Expression Language (SpEL) ব্যবহার করে কাস্টম শর্তাবলী নির্ধারণ করতে সহায়ক। এটি মেথডের আগে এক্সপ্রেশন চেক করে অ্যাক্সেস নিয়ন্ত্রণ করে।

@PreAuthorize Example:

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void createProduct() {
        System.out.println("Product created by Admin.");
    }

    @PreAuthorize("hasPermission(#product, 'read')")
    public void viewProduct(Product product) {
        System.out.println("Product details viewed by the user.");
    }

    @PreAuthorize("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
    public void updateProduct() {
        System.out.println("Product updated by User or Admin.");
    }
}
  • @PreAuthorize("hasRole('ROLE_ADMIN')"): এটি নিশ্চিত করে যে শুধুমাত্র ROLE_ADMIN রোলধারী ব্যবহারকারী createProduct() মেথডটি অ্যাক্সেস করতে পারবে।
  • @PreAuthorize("hasPermission(#product, 'read')"): এটি #product অবজেক্টের ওপর read পারমিশন চেক করবে এবং কেবলমাত্র সেই ব্যবহারকারী যার কাছে এই পারমিশন রয়েছে, সে viewProduct() মেথডটি অ্যাক্সেস করতে পারবে।
  • @PreAuthorize("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')"): এটি নিশ্চিত করে যে ROLE_USER অথবা ROLE_ADMIN রোলধারী ব্যবহারকারী updateProduct() মেথডটি অ্যাক্সেস করতে পারবে।

Configuring Spring Security for @PreAuthorize

Spring Security তে @PreAuthorize ব্যবহার করতে @EnableGlobalMethodSecurity(prePostEnabled = true) কনফিগারেশন করতে হয়।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)  // Enable @PreAuthorize
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // Security configuration
}

3. @Secured এবং @PreAuthorize এর মধ্যে পার্থক্য

Feature@Secured@PreAuthorize
Basic Purposeরোল ভিত্তিক অ্যাক্সেস কন্ট্রোলSpEL এর মাধ্যমে কাস্টম শর্তাবলী দিয়ে অ্যাক্সেস কন্ট্রোল
Expression SupportNoYes (SpEL expressions support)
Use Caseসহজ রোল ভিত্তিক নিরাপত্তা নিয়ন্ত্রণকাস্টম শর্তাবলী, পারমিশন চেক, এবং আরও উন্নত কন্ট্রোল
Example@Secured("ROLE_ADMIN")@PreAuthorize("hasRole('ROLE_ADMIN')")

4. @Secured এবং @PreAuthorize এর ব্যবহার ক্ষেত্রে উদাহরণ

@Secured Example:

@Secured("ROLE_ADMIN")
public void deleteProduct() {
    // Only Admin can delete product
}

@PreAuthorize Example:

@PreAuthorize("hasRole('ROLE_ADMIN') and #product.price > 1000")
public void discountProduct(Product product) {
    // Admin can discount products with price greater than 1000
}

Complex Example with @PreAuthorize:

@PreAuthorize("hasRole('ROLE_ADMIN') or (hasRole('ROLE_USER') and #product.owner == authentication.name)")
public void updateProductDetails(Product product) {
    // Admin can update, or User can update their own product
}

5. Conclusion

Spring Security তে @Secured এবং @PreAuthorize অ্যানোটেশন দুটি powerful tool যা মেথড লেভেলে access control পরিচালনা করতে সহায়ক। @Secured সোজা রোল ভিত্তিক কন্ট্রোল প্রদান করে, যেখানে @PreAuthorize অধিক নমনীয় এবং Spring Expression Language (SpEL) এর মাধ্যমে কাস্টম access control তৈরির সুযোগ দেয়।

  • @Secured: সাধারণত রোল বা প্রিভিলেজ ভিত্তিক অ্যাক্সেস কন্ট্রোলের জন্য ব্যবহৃত হয়।
  • @PreAuthorize: কাস্টম শর্তাবলী বা স্পেসিফিক পারমিশন ভিত্তিক অ্যাক্সেস কন্ট্রোলের জন্য ব্যবহৃত হয়, যা আরও জটিল সিকিউরিটি চেক করতে সক্ষম।

@PreAuthorize এবং @Secured এর মাধ্যমে আপনি Spring MVC অ্যাপ্লিকেশনে শক্তিশালী এবং নমনীয় নিরাপত্তা ব্যবস্থা তৈরি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...