HttpSecurity, WebSecurity और AuthenticationManagerBuilder


100

किसी को समझा सकता है कि कब ओवरराइड करना है configure(HttpSecurity), configure(WebSecurity)और configure(AuthenticationManagerBuilder)?

जवाबों:


125

कॉन्फ़िगर करें (AuthenticationManagerBuilder) का उपयोग प्रमाणीकरण प्रमाणीकरण स्थापित करने के लिए किया जाता है, जो प्रमाणीकरणप्राविडर्स को आसानी से जोड़ने की अनुमति देता है: उदाहरण के लिए, अंतर्निहित 'उपयोगकर्ता' और 'व्यवस्थापक' लॉगिन के साथ इन-मेमोरी प्रमाणीकरण को परिभाषित करता है।

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

कॉन्फिगरेशन (HttpSecurity) एक चयन स्तर के आधार पर संसाधन स्तर पर वेब आधारित सुरक्षा के कॉन्फ़िगरेशन की अनुमति देता है - उदाहरण के लिए नीचे दिए गए उदाहरण उन URL को प्रतिबंधित करते हैं जो ADMIN की भूमिका वाले / व्यवस्थापक / उपयोगकर्ताओं के साथ शुरू होते हैं, और घोषित करते हैं कि किसी अन्य व्यक्ति को होने की आवश्यकता है सफलतापूर्वक प्रमाणित।

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

कॉन्फ़िगर (WebSecurity) का उपयोग कॉन्फ़िगरेशन सेटिंग्स के लिए किया जाता है जो वैश्विक सुरक्षा को प्रभावित करते हैं (संसाधनों को अनदेखा करें, डीबग मोड सेट करें, कस्टम फ़ायरवॉल परिभाषा लागू करके अनुरोधों को अस्वीकार करें)। उदाहरण के लिए, निम्न विधि प्रमाणीकरण उद्देश्यों के लिए अनदेखा किए जाने वाले / संसाधनों / के साथ शुरू होने वाले किसी भी अनुरोध का कारण होगी।

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

आप अधिक जानकारी के लिए निम्न लिंक का उल्लेख कर सकते हैं वसंत सुरक्षा जावा विन्यास पूर्वावलोकन: वेब सुरक्षा


2
अच्छा जवाब निक। स्प्रिंग-सिक्योरिटी-कॉन्फिगर-5.0.3 (जो स्प्रिंग-बूट 2.0.0 के साथ आता है) के साथ, मैं विधि नहीं ढूंढ सका http.authorizeUrls(), शायद http.authorizeRequests()कुछ समय पहले इसका नाम बदल गया।
यी ओयू

5
मुझे पता है कि यह पुराना है, लेकिन यहां सबसे अच्छा अभ्यास क्या है? मुझे कॉन्फ़िगर (HttpSecurity http) विधि कार्यान्वयन के उदाहरण मिले हैं। जो http.antMatchers ("/ foo") को लागू करने वाला है। permAll () "जो इनवॉइसिंग (WebSecurity) में web.ignoring () (ant। विरोधी) (" / foo ") के बराबर लगता है। वेब) विधि।
क्रिसनटाउन

बहुत बढ़िया जवाब। अगर हम कभी HttpSecurity पर PermAll को कॉल करने की आवश्यकता है तो मैं सोच रहा हूं? क्या हम WebSecurity का उपयोग करके सभी खुले url की तरह / रजिस्टर या लॉगिन को अनदेखा नहीं कर सकते हैं? फिर सभी ट्यूटोरियल या उत्तर HttpSecurity.permitAll का उपयोग / रजिस्टर / और लॉगिन के लिए / WebSecurity.ingore के लिए / सार्वजनिक / संसाधनों के लिए क्यों करते हैं? -
मोहम्मद वसीम

3

WebSecurity ignoring()पद्धति का सामान्य उपयोग स्प्रिंग सुरक्षा को छोड़ देता है और स्प्रिंग सुरक्षा की कोई भी सुविधा उपलब्ध नहीं होगी। WebSecurity HttpSecurity से ऊपर आधारित है।

@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();
}

उपरोक्त उदाहरण में WebSecurity वसंत उपेक्षा /resources/**और /publics/**। इसलिए .antMatchers("/publics/**").hasRole("USER")HttpSecurity में है उपेक्षित

यह पूरी तरह से सुरक्षा फ़िल्टर श्रृंखला से अनुरोध पैटर्न को छोड़ देगा। ध्यान दें कि इस पथ से मेल खाने वाली किसी भी चीज़ पर कोई प्रमाणीकरण या प्राधिकरण सेवाएँ लागू नहीं होंगी और स्वतंत्र रूप से सुलभ होंगी।

configure(HttpSecurity)चयन स्तर के आधार पर संसाधन-स्तर पर वेब-आधारित सुरक्षा के कॉन्फ़िगरेशन की अनुमति देता है - उदाहरण के लिए नीचे दिया गया उदाहरण उन URL को प्रतिबंधित करता है जो /admin/उन उपयोगकर्ताओं के साथ शुरू होते हैं जिनकी ADMIN भूमिका है , और यह घोषणा करते हैं कि किसी भी अन्य URL को सफलतापूर्वक प्रमाणित करने की आवश्यकता है

configure(WebSecurity)कॉन्फ़िगरेशन सेटिंग्स के लिए उपयोग किया जाता है जो वैश्विक सुरक्षा को प्रभावित करते हैं (संसाधनों को अनदेखा करें, डीबग मोड सेट करें, कस्टम फ़ायरवॉल परिभाषा को लागू करके अनुरोधों को अस्वीकार करें)। उदाहरण के लिए, निम्नलिखित विधि प्रमाणीकरण अनुरोधों के लिए अनदेखी किए/resources/ जाने वाले किसी भी अनुरोध का कारण बनेगी।

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

SecurityBuilder एक बनाने के लिए इस्तेमाल किया AuthenticationManagerमेमरी प्रमाणीकरण, LDAP प्रमाणीकरण, JDBC आधारित प्रमाणीकरण को आसानी से बनाने , UserDetailsService को जोड़ने और AuthenticationProvider's को जोड़ने की अनुमति देता है

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

बहुत बढ़िया जवाब। अगर हम कभी HttpSecurity पर PermAll को कॉल करने की आवश्यकता है तो मैं सोच रहा हूं? क्या हम WebSecurity का उपयोग करके सभी खुले url की तरह / रजिस्टर या लॉगिन को अनदेखा नहीं कर सकते हैं? फिर सभी ट्यूटोरियल या उत्तर HttpSecurity.permitAll का उपयोग / रजिस्टर / और लॉगिन के लिए / WebSecurity.ingore के लिए / सार्वजनिक / संसाधनों के लिए क्यों करते हैं?
मोहम्मद वसीम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.