java स्प्रिंग बूट 2.0.x निश्चित प्रोफ़ाइल के लिए सुरक्षा अक्षम करें




spring-boot spring-security (4)

स्प्रिंग बूट 2 में सुरक्षा को अक्षम करने का एक और विकल्प है

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

इसे मुख्य वर्ग में जोड़ें

स्प्रिंग बूट 1.5.x में, मैंने सुरक्षा को कॉन्फ़िगर किया है और कुछ प्रोफाइल (जैसे स्थानीय) में, मैंने security.basic.enabled=false जोड़ा है। प्रोफ़ाइल के लिए सभी सुरक्षा को अक्षम करने के लिए .properties फ़ाइल में security.basic.enabled=false लाइन। मैं नए स्प्रिंग बूट 2 पर माइग्रेट करने की कोशिश कर रहा हूं, जहां उस कॉन्फ़िगरेशन प्रॉपर्टी को हटा दिया जाता है। मैं स्प्रिंग बूट 2.0.x में समान व्यवहार (इस संपत्ति का उपयोग किए बिना) कैसे प्राप्त कर सकता हूं?

मैंने पहले ही Spring-Boot-Security-2.0 और security-changes-in-spring-boot-2-0-m4 पढ़ लिया है और इस संपत्ति के संबंध में कुछ भी नहीं है।


आपको एक कस्टम स्प्रिंग सुरक्षा कॉन्फ़िगरेशन जोड़ना होगा, स्प्रिंग बूट संदर्भ गाइड देखें :

28.1 एमवीसी सुरक्षा

डिफ़ॉल्ट सुरक्षा कॉन्फ़िगरेशन SecurityAutoConfiguration और UserDetailsServiceAutoConfiguration में लागू किया गया है। SecurityAutoConfiguration वेब सुरक्षा और UserDetailsServiceAutoConfiguration आयात प्रमाणीकरण को कॉन्फ़िगर करता है, जो गैर-वेब अनुप्रयोगों में भी प्रासंगिक है। डिफ़ॉल्ट वेब एप्लिकेशन सुरक्षा कॉन्फ़िगरेशन को पूरी तरह से बंद करने के लिए, आप एक प्रकार का WebSecurityConfigurerAdapter जोड़ सकते हैं (ऐसा करने से UserDetailsService कॉन्फ़िगरेशन या Actuator की सुरक्षा अक्षम नहीं होती है)।

उदाहरण के लिए:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

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

केवल प्रोफ़ाइल के लिए कॉन्फ़िगरेशन का उपयोग करने के लिए वर्ग में @Profile जोड़ें। यदि आप इसे संपत्ति से सक्षम करना चाहते हैं, तो कक्षा में ConditionalOnProperty जोड़ें।


वास्तव में इस प्रश्न के लिए निश्चित कॉन्फ़िगरेशन के कई उत्तर हैं; मेरे मामले में मैं स्प्रिंग बूट 2 के आसपास स्प्रिंग सिक्योरिटी और JWT के साथ खेल रहा हूं। अपने REST के समापन बिंदुओं को सुरक्षित करने के लिए मुझे टोकन आदि बनाने की आवश्यकता है। जब मैंने अपना कोड लिखा और यह देखने के लिए अपने समापन बिंदुओं का परीक्षण करने का प्रयास किया कि क्या JWT ठीक काम करता है, तो मैं डिफ़ॉल्ट लॉगिन पृष्ठ का सामना कर रहा हूं। मैंने ऊपर बताई गई संपत्तियों की फ़ाइल बदलने की कोशिश की और आखिरकार मैंने अपने आवेदन वर्ग में @SpringBootApplication(exclude = {SecurityAutoConfiguration.class} ) एनोटेशन जोड़कर इसे अक्षम कर दिया।

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(JwtWithSpringBootApplication.class, args);
    }
}

यहां बताया गया है कि मैंने समस्या का समाधान कैसे किया। इस बात का एक उदाहरण है कि मेरा सुरक्षा विन्यास स्प्रिंग बूट 1.5.x में कैसे दिखता है। संपत्ति संपत्ति security.basic.enabled=false साथ अक्षम की गई थी।

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic();
    }
}

चूंकि security.basic.enabled को स्प्रिंग बूट 2 में हटा दिया गया था (लेकिन अभी भी संपत्ति के नाम के रूप में आरक्षित है), मैंने कस्टम संपत्ति के रूप में security.enabled का उपयोग करके समाप्त कर दिया। यहाँ एक उदाहरण है कि मेरा बूट स्प्रिंग बूट 2 में कैसा दिखता है:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${security.enabled:true}")
    private boolean securityEnabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        if (securityEnabled)
            web.ignoring().antMatchers("/upload/**");
        else
            web.ignoring().antMatchers("/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityEnabled)
            http.csrf().disable().authorizeRequests()
                    .anyRequest().authenticated()
                    .and().httpBasic();
    }
}






spring-security