আমার সংস্থাটি আমাদের পরবর্তী প্রকল্পগুলির মধ্যে এটি ব্যবহার করা উচিত কিনা তা নির্ধারণের জন্য স্প্রিং এমভিসি মূল্যায়ন করে চলেছে। এখনও অবধি আমি যা দেখেছি তা পছন্দ করি এবং এখনই আমি স্প্রিং সিকিউরিটি মডিউলটি একবার দেখে নিচ্ছি এটি নির্ধারণ করতে এটি ব্যবহার করতে পারি / করা উচিত এমন কিছু কিনা।
আমাদের সুরক্ষা প্রয়োজনীয়তাগুলি বেশ বেসিক; ব্যবহারকারীর কেবল সাইটের নির্দিষ্ট অংশগুলিতে অ্যাক্সেস করতে সক্ষম হওয়ার জন্য একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড সরবরাহ করতে সক্ষম হতে হবে (যেমন তাদের অ্যাকাউন্ট সম্পর্কে তথ্য পেতে); এবং সাইটে বেশ কয়েকটি পৃষ্ঠাগুলি রয়েছে (FAQs, সমর্থন, ইত্যাদি) যেখানে একজন অনামী ব্যবহারকারীকে অ্যাক্সেস দেওয়া উচিত।
যে প্রোটোটাইপটি আমি তৈরি করছি তাতে আমি একটি প্রমাণীকরণকারী ব্যবহারকারীর জন্য সেশনে একটি "লগইনক্রেনডেন্টিয়ালস" অবজেক্ট (যা কেবলমাত্র ব্যবহারকারীর নাম এবং পাসওয়ার্ড সহ) সংরক্ষণ করি; কিছু নিয়ন্ত্রণকারী পরীক্ষা করে দেখুন যে লগ-ইন করা ব্যবহারকারীর নামটির জন্য রেফারেন্স পেতে এই বস্তুটি সেশনে রয়েছে কিনা। আমি তার পরিবর্তে বসন্ত সুরক্ষার সাথে এই বাড়ির উত্থিত যুক্তিটি প্রতিস্থাপন করতে চাই যা "যেভাবে আমরা লগ ইন করা ব্যবহারকারীদের কীভাবে ট্র্যাক করব?" কোনও ধরণের অপসারণ করার দুর্দান্ত সুবিধা পাবে? এবং "আমরা কীভাবে ব্যবহারকারীদের প্রমাণীকরণ করব?" আমার নিয়ামক / ব্যবসায় কোড থেকে।
দেখে মনে হচ্ছে স্প্রিং সিকিউরিটি আপনার অ্যাপের যে কোনও জায়গা থেকে ব্যবহারকারীর নাম / মূল তথ্য অ্যাক্সেস করতে সক্ষম হতে (প্রতি থ্রেড) "প্রসঙ্গ" অবজেক্ট সরবরাহ করে ...
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
... যা একেবারে অন-স্প্রিংয়ের মতো বলে মনে হয় যেমন এই অবজেক্টটি একরকম (গ্লোবাল) সিঙ্গলটন।
আমার প্রশ্নটি হ'ল: যদি স্প্রিং সিকিউরিটিতে প্রমাণীকৃত ব্যবহারকারী সম্পর্কে তথ্য অ্যাক্সেসের এটি স্ট্যান্ডার্ড উপায় হয় তবে সিকিউরিটি কনটেস্টে কোনও প্রমাণীকরণ অবজেক্টটি ইনজেক্ট করার স্বীকৃত উপায় কী যাতে ইউনিট পরীক্ষাগুলির প্রয়োজন হলে এটি আমার ইউনিট পরীক্ষার জন্য উপলব্ধ? অনুমোদিত ব্যবহারকারী?
প্রতিটি পরীক্ষার মামলার সূচনা পদ্ধতিতে আমার কি তারটি লাগানো দরকার?
protected void setUp() throws Exception {
...
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword()));
...
}
এটি অত্যধিক ভারবস বলে মনে হচ্ছে। কোন সহজ উপায় আছে?
SecurityContextHolder
বস্তু নিজেই খুব আন-বসন্ত-মত মনে হয় ...