স্প্রিং সুরক্ষা 3 তে @ সুরক্ষিত এবং @ প্রাইভেটরাইজের মধ্যে পার্থক্য কী?


147

বসন্ত সুরক্ষার মধ্যে পার্থক্য কী তা আমার পক্ষে পরিষ্কার নয়:

 @PreAuthorize("hasRole('ROLE_USER')")
 public void create(Contact contact)

এবং

@Secured("ROLE_USER")
public void create(Contact contact)

আমি বুঝতে পারি PreAuthorize স্প্রিং এল এর সাথে কাজ করতে পারে তবে আমার নমুনায় আসলে কি পার্থক্য আছে?

উত্তর:


169

আসল পার্থক্যটি হ'ল স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (স্পেল) এর@PreAuthorize সাথে কাজ করতে পারে । আপনি পারেন:

  • অ্যাক্সেস পদ্ধতি এবং এর বৈশিষ্ট্য SecurityExpressionRoot
  • অ্যাক্সেস পদ্ধতির আর্গুমেন্টগুলির জন্য (ডিবাগ তথ্য বা কাস্টম সহ সংকলন প্রয়োজন ParameterNameDiscoverer):

    @PreAuthorize("#contact.name == principal.name")
    public void doSomething(Contact contact)
    
  • (উন্নত বৈশিষ্ট্য) আপনার নিজস্ব পদ্ধতি যুক্ত করুন (ওভাররাইড MethodSecurityExpressionHandlerএবং এটি হিসাবে সেট করুন <global-method-security><expression-handler ... /></...>)।

এই সম্পর্কে জানতাম না, তবে দুর্দান্ত মনে হচ্ছে! : ডি
আলফোনসো নিশিকাওয়া

52

আপনি যদি পদ্ধতিটিতে অ্যাক্সেসের মতো কিছু করতে চান তবে যদি ব্যবহারকারীর Role1 এবং Role2 থাকে তবে আপনাকে @PreAuthorize ব্যবহার করতে হবে

@PreAuthorize("hasRole('ROLE_role1') and hasRole('ROLE_role2')")

ব্যবহার

@Secured({"role1", "role2"}) // is treated as an OR

40

সোজা, এর @PreAuthorizeচেয়েও নতুন @Secured

সুতরাং আমি বলি এটি @PreAuthorize"এক্সপ্রেশন-ভিত্তিক" হওয়ায় এটি ব্যবহার করা ভাল এবং আপনি হ্যাশরল, হ্যাজআনিরোল, পারমিটআল ইত্যাদির মত প্রকাশ করতে পারেন

এক্সপ্রেশন সম্পর্কে জানতে, এই উদাহরণ এক্সপ্রেশন দেখুন


13

@PreAuthorizeএটা অপেক্ষা অধিক শক্তিধর কে ভিন্ন, @Secured

  • পুরানো @Securedটীকাগুলি এক্সপ্রেশন ব্যবহার করতে দেয়নি।

  • স্প্রিং সিকিউরিটি 3 দিয়ে শুরু করে, আরও নমনীয় টীকাগুলি @PreAuthorizeএবং @PostAuthorize(পাশাপাশি @PreFilter এবং @ পোষ্টফিল্টার) পছন্দ করা হয়, কারণ তারা স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (স্পেল) সমর্থন করে এবং এক্সপ্রেশন-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ সরবরাহ করে।

  • @Secured("ROLE_ADMIN")টীকা হিসাবে একই @PreAuthorize ("hasRole('ROLE_ADMIN')")

  • @Secured({"ROLE_USER","ROLE_ADMIN")ROLE_USER হিসাবে বিবেচনা করা হয় বা ROLE_ADMIN।

সুতরাং আপনি ব্যবহার করে AND শর্তটি প্রকাশ করতে পারবেন না

@Secured । আপনি এটির সাথে একই সংজ্ঞা দিতে পারেন @PreAuthorize("hasRole('ADMIN') OR hasRole('USER')")যা বোঝা সহজ। আপনি এ্যান্ড, ও, বা না (!) প্রকাশ করতে পারেন ।

@ প্রিঅ্যাটরাইটাইজ করুন ("! অজ্ঞাতনামা () এবং হ্যাশরোল ('অ্যাডমিন')")


1
আপনি আমার সম্পাদনাটি উল্টাতে গিয়ে আপনি কি বলছেন যে এতে কোনও ত্রুটি নেই "hasRole('ADMIN OR hasRole('USER')"?
রিগন

8
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
|                                               |                         @Secured                         |                         @PreAuthorize                           |
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
| Spring EL expressions                         | Does'nt supports.                                        | Supports                                                        |
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
| Multiple roles conjunctions with AND operator | Does'nt supports.(If there are multiple roles defined    | Supports                                                        |
|                                               |they will be automatically combined with OR operator)     |                                                                 |
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
| To enable annotation                          | Add following line to spring-security.xml                | Add following line to spring-security.xml                       |
|                                               | <global-method-security secured-annotations="enabled" /> | <global-method-security pre-post-annotations="enabled"/>        |
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
| Example                                       | @Secured({ROLE_ADMIN , ROLE_USER})                       | @PreAuthorize("hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')") |
|                                               | public void addUser(UserInfo user){...}                  | public void addUser(UserInfo user){...}                         |
+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.