Spring Expression Language (SpEL)-এর মাধ্যমে অ্যাপ্লিকেশন লজিকের ভিতরে Access Control প্রয়োগ করা যেতে পারে। স্প্রিং নিরাপত্তা ফিচারের মধ্যে, @PreAuthorize এবং @PostAuthorize অ্যানোটেশন ব্যবহার করে method level access control সেট করা সম্ভব। এগুলো স্প্রিং সিকিউরিটি (Spring Security)-এর অংশ এবং ব্যবহারকারীর অনুমতি নির্ধারণ করতে SpEL এক্সপ্রেশন ব্যবহার করে কার্যকরভাবে রোল-ভিত্তিক অথেনটিকেশন ও অথোরাইজেশন প্রয়োগ করা হয়।
@PreAuthorize এবং @PostAuthorize এর মাধ্যমে Access Control
1. @PreAuthorize অ্যানোটেশন
@PreAuthorize একটি স্প্রিং সিকিউরিটি অ্যানোটেশন যা মেথড কল করার আগে এক্সপ্রেশন চেক করে। এই অ্যানোটেশন ব্যবহার করে নির্দিষ্ট মেথডে প্রবেশের জন্য অনুমতির চেক করা যায়। আপনি SpEL এক্সপ্রেশন ব্যবহার করে রোল এবং পারমিশন যাচাই করতে পারেন।
@PreAuthorize এর সিনট্যাক্স
@PreAuthorize("expression")
public void methodName() {
// Method implementation
}
এখানে, expression হলো SpEL এক্সপ্রেশন যা যাচাই করবে যে, মেথড কল করার জন্য ব্যবহারকারীর যথাযথ অনুমতি আছে কিনা।
@PreAuthorize ব্যবহার করার উদাহরণ
ধরা যাক, আপনার অ্যাপ্লিকেশনে একটি deleteUser মেথড আছে এবং আপনি চাইছেন যে, শুধুমাত্র ADMIN রোলের ব্যবহারকারী এটি কল করতে পারবে।
import org.springframework.security.access.prepost.PreAuthorize;
public class UserService {
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void deleteUser(Long userId) {
// User delete logic
}
}
এখানে, hasRole('ROLE_ADMIN') SpEL এক্সপ্রেশন ব্যবহার করে যাচাই করা হচ্ছে যে, ব্যবহারকারী ADMIN রোলের অধিকারী কিনা। যদি তিনি না হন, তাহলে deleteUser মেথডটি কল করা যাবে না।
আরও এক্সপ্রেশন উদাহরণ:
hasPermission('resource', 'write'): কোনো নির্দিষ্ট রিসোর্সে write পারমিশন চেক করা।#user.id == principal.id: বর্তমান ব্যবহারকারীর ID তুলনা করা নির্দিষ্ট অবজেক্টের ID এর সাথে।hasRole('ROLE_USER') and #user.username == authentication.name:ROLE_USERরোল এবং বর্তমান ব্যবহারকারীর সাথে মেলানো ইউজারনেম।
2. @PostAuthorize অ্যানোটেশন
@PostAuthorize অ্যানোটেশনটি মেথড কল করার পরে এক্সপ্রেশন চেক করে। এটি মূলত তখন ব্যবহৃত হয় যখন আপনি মেথডের আউটপুট চেক করতে চান, অর্থাৎ মেথডটি সম্পন্ন হওয়ার পর তার রিটার্ন ভ্যালুর ওপর নির্ভর করে অ্যাকসেস কন্ট্রোল প্রয়োগ করবেন।
@PostAuthorize এর সিনট্যাক্স
@PostAuthorize("expression")
public void methodName() {
// Method implementation
}
এখানে, expression হলো SpEL এক্সপ্রেশন যা মেথডের আউটপুটের পর্যালোচনা করবে।
@PostAuthorize ব্যবহার করার উদাহরণ
ধরা যাক, getUser মেথডটি একটি ব্যবহারকারীর তথ্য ফেরত দেয় এবং আপনি চান যে, ব্যবহারকারী শুধুমাত্র তার নিজস্ব তথ্য দেখতে পারবে।
import org.springframework.security.access.prepost.PostAuthorize;
public class UserService {
@PostAuthorize("returnObject.username == authentication.name")
public User getUser(Long userId) {
// Fetch user by ID
return userRepository.findById(userId);
}
}
এখানে, returnObject.username == authentication.name SpEL এক্সপ্রেশন ব্যবহার করা হয়েছে যা যাচাই করে, মেথডের রিটার্ন ভ্যালু (যেমন User অবজেক্ট) এর username ফিল্ড বর্তমান লগইন করা ব্যবহারকারীর নামের সাথে মেলে কিনা। যদি মেলে না, তাহলে অ্যাকসেস দেওয়া হবে না।
আরও এক্সপ্রেশন উদাহরণ:
returnObject.id == authentication.principal.id: মেথডের রিটার্ন ভ্যালু (যেমনUserঅবজেক্ট) এর ID বর্তমান ব্যবহারকারীর ID এর সাথে মেলা।returnObject.price <= authentication.principal.balance: রিটার্ন ভ্যালুর একটিpriceফিল্ড বর্তমান ব্যবহারকারীরbalanceএর তুলনায় কম বা সমান কিনা চেক করা।
@PreAuthorize এবং @PostAuthorize এর ব্যবহারিক গুরুত্ব
1. ফাইন-গ্রেইনড অথোরাইজেশন
স্প্রিং সিকিউরিটির @PreAuthorize এবং @PostAuthorize অ্যানোটেশন ব্যবহার করে আপনি মেথডের এক্সিকিউশন সঠিকভাবে কন্ট্রোল করতে পারেন। যেখানে @PreAuthorize মেথড কল করার আগে চেক করে, সেখানে @PostAuthorize মেথড কল করার পরে চেক করে। এই ক্ষমতা আপনাকে মেথড লেভেলে নিরাপত্তা প্রয়োগ করতে সক্ষম করে।
2. SpEL এক্সপ্রেশন ব্যবহার
SpEL (Spring Expression Language) এক্সপ্রেশন ব্যবহার করে খুবই ডাইনামিকভাবে এবং কাস্টমাইজড ভাবে অ্যাকসেস কন্ট্রোল করা সম্ভব। ব্যবহারকারীর রোল, পারমিশন এবং মেথডের রিটার্ন ভ্যালু অনুযায়ী চেক করা যায়, যা অ্যাপ্লিকেশন সিকিউরিটি আরও শক্তিশালী করে।
সারাংশ
@PreAuthorize এবং @PostAuthorize স্প্রিং সিকিউরিটির অ্যানোটেশনগুলি মেথড লেভেলে অ্যাকসেস কন্ট্রোল প্রয়োগের জন্য ব্যবহৃত হয়। @PreAuthorize ব্যবহারকারীর অনুমতি যাচাই করে মেথড কল করার আগে, আর @PostAuthorize মেথডের আউটপুট চেক করে কল করার পর। এই অ্যানোটেশনগুলিতে SpEL এক্সপ্রেশন ব্যবহার করে খুবই শক্তিশালী অথোরাইজেশন প্রয়োগ করা যায়, যা অ্যাপ্লিকেশন নিরাপত্তা নিশ্চিত করতে সহায়ক।
Read more