এইচটিপিএসিকিউরিটি, ওয়েবসিকিউরিটি এবং অথেনটিকেশন ম্যানেজারবিল্ডার


উত্তর:


128

কনফিগার (প্রমাণীকরণব্যবস্থাপনাকারী) সহজেই প্রমাণীকরণের সরবরাহকারীদের সহজেই যুক্ত করার অনুমতি দিয়ে একটি প্রমাণীকরণ প্রক্রিয়া স্থাপন করতে ব্যবহৃত হয়: উদাহরণস্বরূপ অন্তর্নির্মিত 'ব্যবহারকারী' এবং 'অ্যাডমিন' লগইনগুলির সাথে ইন-মেমরি প্রমাণীকরণের সংজ্ঞা দেয়।

public void configure(AuthenticationManagerBuilder auth) {
    auth
        .inMemoryAuthentication()
        .withUser("user")
        .password("password")
        .roles("USER")
    .and()
        .withUser("admin")
        .password("password")
        .roles("ADMIN","USER");
}

কনফিগারেশন (এইচটিটিপিএসিকিউরিটি) একটি নির্বাচনের ম্যাচের উপর ভিত্তি করে একটি রিসোর্স স্তরে ওয়েব ভিত্তিক সুরক্ষার কনফিগারেশনকে মঞ্জুরি দেয় - উদাহরণস্বরূপ নীচের উদাহরণটি অ্যাডমিনের ভূমিকা থাকা ব্যবহারকারীদের / অ্যাডমিন / দিয়ে শুরু হওয়া URL গুলি সীমাবদ্ধ করে এবং ঘোষণা করে যে অন্য কোনও ইউআরএল থাকা দরকার সফলভাবে প্রমাণীকৃত।

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated()
}

কনফিগারেশন (ওয়েবসিকিউরিটি) কনফিগারেশন সেটিংসের জন্য ব্যবহৃত হয় যা বৈশ্বিক সুরক্ষাকে প্রভাবিত করে (সংস্থানসমূহকে উপেক্ষা করে, ডিবাগ মোড সেট করে, একটি কাস্টম ফায়ারওয়াল সংজ্ঞা প্রয়োগ করে অনুরোধগুলি প্রত্যাখ্যান করে)। উদাহরণস্বরূপ, নিম্নলিখিত পদ্ধতিটি প্রমাণীকরণের উদ্দেশ্যে / উত্স / দিয়ে শুরু হওয়া কোনও অনুরোধকে অগ্রাহ্য করবে।

public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**");
}

আরও তথ্যের জন্য আপনি নীচের লিঙ্কটি উল্লেখ করতে পারেন স্প্রিং সিকিউরিটি জাভা কনফিগারেশন পূর্বরূপ: ওয়েব সুরক্ষা


4
ভাল উত্তর নিক। স্প্রিং-সিকিউরিটি-কনফিগারেশন -5.0.3 (যা স্প্রিং-বুট 2.0.0 এর সাথে আসে) সহ, আমি পদ্ধতিটি খুঁজে পেলাম না http.authorizeUrls(), সম্ভবত এটির http.authorizeRequests()কিছু আগে নামকরণ হয়েছে ।
Yi Ou

5
আমি জানি এটি পুরানো, তবে এখানে সেরা অনুশীলন কী? আমি http.antMatchers ("/ foo") কে কনফিগার করা (এইচটিপিএসিকিউরিটি http) পদ্ধতি প্রয়োগকরণের উদাহরণ খুঁজে পেয়েছি per ওয়েব) পদ্ধতি।
ক্রিসিনমটাউন

দুর্দান্ত উত্তর আমি ভাবছি যে এইচটিটিপিএসিকিউরিটিতে আমাদের কখনও পারমিট কল করা দরকার? আমরা কী কেবল ওয়েবসিকিউরিটি ব্যবহার করে সমস্ত ওপেন url এর মতো / রেজিস্টার বা / লগইনকে উপেক্ষা করতে পারি না? তাহলে সমস্ত টিউটোরিয়াল বা উত্তরগুলি কেন / নিবন্ধন এবং / লগইন করার জন্য HTTPSecurity.permitAll ব্যবহার করে তবে ওয়েবসিকিউরিটি.ইনোর / সংস্থার / জনসাধারণের জন্য? -
মোহাম্মদ ওয়াসিম

3

ওয়েবসিকিউরিটি ignoring()পদ্ধতির সাধারণ ব্যবহার স্প্রিং সিকিউরিটি বাদ দেয় এবং স্প্রিং সিকিউরিটির বৈশিষ্ট্যগুলির কোনওটিই উপলভ্য হবে না। ওয়েবসিকিউরিটি এইচটিটিপিএসিকিউরিটির উপরে ভিত্তি করে।

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**")
        .antMatchers("/publics/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/publics/**").hasRole("USER") // no effect
        .anyRequest().authenticated();
}

উপরের উদাহরণে ওয়েবসিকিউরিটি বসন্তকে উপেক্ষা করে /resources/**এবং /publics/**। অতএব .antMatchers("/publics/**").hasRole("USER")এইচটিটিপিএসিকিউরিটির মধ্যে অনাকাঙ্খিত

এটি পুরোপুরি সুরক্ষা ফিল্টার চেইন থেকে অনুরোধের ধরণটি বাদ দেবে। মনে রাখবেন যে এই পথের সাথে মেলে এমন কোনও কিছুর পরে কোনও প্রমাণীকরণ বা অনুমোদন পরিষেবা প্রয়োগ করা হবে না এবং অবাধে অ্যাক্সেসযোগ্য হবে।

configure(HttpSecurity)একটি নির্বাচনের ম্যাচের উপর ভিত্তি করে একটি রিসোর্স স্তরে ওয়েব-ভিত্তিক সুরক্ষার কনফিগারেশনকে মঞ্জুরি দেয় - উদাহরণস্বরূপ নীচের উদাহরণটি এমন URL গুলি সীমাবদ্ধ করে যা /admin/ব্যবহারকারীদের সাথে অ্যাডমিন ভূমিকা রাখে এবং অন্য কোনও ইউআরএল সফলভাবে প্রমাণীকরণের প্রয়োজন বলে ঘোষণা করে

configure(WebSecurity)বিশ্বব্যাপী সুরক্ষা প্রভাবিত করে এমন কনফিগারেশন সেটিংসের জন্য ব্যবহৃত হয় (সংস্থানসমূহকে উপেক্ষা করুন, ডিবাগ মোড সেট করুন, একটি কাস্টম ফায়ারওয়াল সংজ্ঞা প্রয়োগ করে অনুরোধগুলি প্রত্যাখ্যান করুন)। উদাহরণস্বরূপ, নিম্নলিখিত পদ্ধতিটি প্রমাণীকরণের উদ্দেশ্যে অগ্রাহ্য/resources/ করা কোনও অনুরোধের কারণ হতে পারে ।

AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>

সিকিউরিটি বিল্ডার একটি তৈরি করতে ব্যবহৃত হত AuthenticationManagerমেমরি প্রমাণীকরণ, এলডিএপি প্রমাণীকরণ, জেডিবিসি ভিত্তিক প্রমাণীকরণ, ইউজারডেটেলস সার্ভিস যুক্ত করা এবং প্রমাণীকরণপ্রোভিডার যুক্ত করার জন্য সহজেই অনুমতি দেয় ।

@Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
        auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
     }

দুর্দান্ত উত্তর আমি ভাবছি যে এইচটিটিপিএসিকিউরিটিতে আমাদের কখনও পারমিট কল করা দরকার? আমরা কী কেবল ওয়েবসিকিউরিটি ব্যবহার করে সমস্ত ওপেন url এর মতো / রেজিস্টার বা / লগইনকে উপেক্ষা করতে পারি না? তাহলে সমস্ত টিউটোরিয়াল বা উত্তরগুলি কেন / নিবন্ধন এবং / লগইন করার জন্য HTTPSecurity.permitAll ব্যবহার করে তবে ওয়েবসিকিউরিটি.ইনোর / সংস্থার / জনসাধারণের জন্য?
মোহাম্মদ ওয়াসিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.