टॉमकैट के साथ स्प्रिंग बूट शुरू करते समय उपयोगकर्ता नाम और पासवर्ड क्या है?


147

जब मैं अपने स्प्रिंग एप्लिकेशन को स्प्रिंग बूट के माध्यम से तैनात करता हूं और localhost:8080मुझे प्रमाणित करना है, लेकिन उपयोगकर्ता नाम और पासवर्ड क्या है या मैं इसे कैसे सेट कर सकता हूं? मैंने tomcat-usersइसे अपनी फ़ाइल में जोड़ने की कोशिश की, लेकिन यह काम नहीं किया:

<role rolename="manager-gui"/>
    <user username="admin" password="admin" roles="manager-gui"/>

यह आवेदन का प्रारंभिक बिंदु है:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

और यह टॉम्कट निर्भरता है:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

मैं कैसे प्रमाणित करूं localhost:8080?



आपको प्रमाणीकरण करने की आवश्यकता है = आप प्रमाणीकरण चाहते हैं? क्योंकि स्प्रिंग-बूट-स्टार्टर-टॉमकैट / -web में कोई प्रमाणीकरण और न ही उपयोगकर्ता नाम और पासवर्ड है। यदि आप कुछ देखते हैं, तो यह संभवतः एक अलग आवेदन है: 8080
zapl

2
और यह लॉन्च के समय कंसोल पर छपा है।
चिरलीस -कुट्योप्टोफिमिस्टिक-

जवाबों:


297

मुझे लगता है कि आपके पास अपने क्लास पथ पर स्प्रिंग सिक्योरिटी है और फिर स्प्रिंग सुरक्षा स्वचालित रूप से एक डिफ़ॉल्ट उपयोगकर्ता और जनरेट किए गए पासवर्ड के साथ कॉन्फ़िगर किया गया है

इसके लिए कृपया अपनी pom.xml फ़ाइल देखें:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

यदि आपके पास आपके पोम में आपके मुकाबले इस तरह एक लॉग कंसोल संदेश होना चाहिए:

Using default security password: ce6c3d39-8f20-4a41-8e01-803166bb99b6

और ब्राउज़र प्रॉम्प्ट में आप उपयोगकर्ता userऔर कंसोल में मुद्रित पासवर्ड आयात करेंगे ।

या यदि आप वसंत सुरक्षा को कॉन्फ़िगर करना चाहते हैं तो आप स्प्रिंग बूट सुरक्षित उदाहरण पर एक नज़र डाल सकते हैं

यह सुरक्षा अनुभाग में स्प्रिंग बूट संदर्भ प्रलेखन में समझाया गया है , यह इंगित करता है:

The default AuthenticationManager has a single user (‘user username and random password, printed at `INFO` level when the application starts up)

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

23
यदि आप अपने लॉगिंग कॉन्फ़िगरेशन को ट्यून करते हैं, तो सुनिश्चित करें कि org.springframework.boot.autoconfigure.securityश्रेणी INFO संदेशों को लॉग करने के लिए सेट है, अन्यथा डिफ़ॉल्ट पासवर्ड प्रिंट नहीं किया जाएगा।
जीशान

सुंदर। सब कुछ के लिए डिफ़ॉल्ट रूप से। दुधारी तलवार।
सचिन शर्मा

1
मेरे मामले के लिए (स्प्रिंग बूट बनाम: 2.0.4) कंसोल "जनरेट किए गए सुरक्षा पासवर्ड का उपयोग कर रहा है: eb7a9e02-b9cc-484d-9dec-a295b96d94ee"
अमीर

मेरे लिए भी बस यही हाल था। मैं बस इसके बारे में सवाल पूछना शुरू करने वाला था।
दिमित्री रयबीन 20

@ मार्सेल I ने क्लास पाथ में स्प्रिंग सिक्योरिटी को जोड़ा है, और जेनरेट किए गए पासवर्ड को देख सकते हैं, लेकिन जब मैं पोस्टमैन के माध्यम से बेसिक में यूजरनेम के रूप में यूजर और पासवर्ड के रूप में जनरेट पासवर्ड का उपयोग करता हूं। मैं अनधिकृत हो रहा हूं।
लोकेश पांडे

50

यदि spring-securityजार को क्लासपाथ में जोड़ा जाता है और यदि यह spring-bootअनुप्रयोग है तो सभी HTTP एंडपॉइंट्स को डिफ़ॉल्ट सुरक्षा कॉन्फ़िगरेशन क्लास द्वारा सुरक्षित किया जाएगाSecurityAutoConfiguration

यह क्रेडेंशियल्स के लिए पूछने के लिए ब्राउज़र पॉप-अप का कारण बनता है।

प्रत्येक एप्लिकेशन पुनरारंभ के लिए पासवर्ड बदलता है और कंसोल में पाया जा सकता है।

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

चूक के सामने आवेदन सुरक्षा की अपनी परत जोड़ने के लिए,

@EnableWebSecurity
public class SecurityConfig {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

या यदि आप केवल पासवर्ड बदलना चाहते हैं, तो आप डिफ़ॉल्ट रूप से ओवरराइड कर सकते हैं,

application.xml

security.user.password = new_password

या

application.properties

spring.security.user.name=<>
spring.security.user.password=<>

मैंने बस spring.security.user.name = <> spring.security.user.password = <> को application.properties फ़ाइल में जोड़ा है। मैंने और कुछ नहीं किया। फिर भी इसने काम किया।
बारानी आर

आपके पास xml उदाहरण में आपकी संपत्ति का नाम गलत है। यह spring.security.user.password = xxx XML स्वरूपण के बारे में निश्चित नहीं है जैसा कि हम .yml फ़ाइलों का उपयोग करते हैं
davidfrancis

जब inMemoryAuthenticationआप त्रुटि प्राप्त करने के दौरान {noop} के साथ अपने पासवर्ड का उपयोग करते हैं:There is no PasswordEncoder mapped for the id “null”
मार्टिन वैन विंगरडेन

इसको जोड़ें SecurityConfig class @Bean public PasswordEncoder passwordEncoder () {रिटर्न NoOpPasswordEncoder.getInstance (); } यह ठीक कर सकता है कोई आईडी के लिए कोई पासवर्ड नहीं है "
नाल

9

जब ओवरराइडिंग होती है

spring.security.user.name=
spring.security.user.password=

में application.properties , आप की जरूरत नहीं है "के आसपास "username", बस उपयोग username। एक अन्य बिंदु, कच्चे पासवर्ड को संग्रहीत करने के बजाय , इसे bcrypt / scrypt के साथ एन्क्रिप्ट करें और इसे स्टोर करें

spring.security.user.password={bcrypt}encryptedPassword

3

यदि आप अन्य उत्तरों के आधार पर पासवर्ड नहीं खोज सकते हैं जो डिफ़ॉल्ट रूप से इंगित करता है, तो हाल के संस्करणों में लॉग संदेश शब्द बदल गया

Using generated security password: <some UUID>

2

आप उपयोगकर्ता को क्रेडेंशियल्स के लिए भी पूछ सकते हैं और सर्वर शुरू होने के बाद उन्हें गतिशील रूप से सेट कर सकते हैं (बहुत प्रभावी जब आपको ग्राहक वातावरण पर समाधान प्रकाशित करने की आवश्यकता होती है):

@EnableWebSecurity
public class SecurityConfig {

    private static final Logger log = LogManager.getLogger();

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        log.info("Setting in-memory security using the user input...");

        Scanner scanner = new Scanner(System.in);
        String inputUser = null;
        String inputPassword = null;
        System.out.println("\nPlease set the admin credentials for this web application");
        while (true) {
            System.out.print("user: ");
            inputUser = scanner.nextLine();
            System.out.print("password: ");
            inputPassword = scanner.nextLine();
            System.out.print("confirm password: ");
            String inputPasswordConfirm = scanner.nextLine();

            if (inputUser.isEmpty()) {
                System.out.println("Error: user must be set - please try again");
            } else if (inputPassword.isEmpty()) {
                System.out.println("Error: password must be set - please try again");
            } else if (!inputPassword.equals(inputPasswordConfirm)) {
                System.out.println("Error: password and password confirm do not match - please try again");
            } else {
                log.info("Setting the in-memory security using the provided credentials...");
                break;
            }
            System.out.println("");
        }
        scanner.close();

        if (inputUser != null && inputPassword != null) {
             auth.inMemoryAuthentication()
                .withUser(inputUser)
                .password(inputPassword)
                .roles("USER");
        }
    }
}

(मई 2018) एक अद्यतन - यह स्प्रिंग बूट २.x पर काम करेगा:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private static final Logger log = LogManager.getLogger();

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Note: 
        // Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
        // Note that the CSRf token is disabled for all requests
        log.info("Disabling CSRF, enabling basic authentication...");
        http
        .authorizeRequests()
            .antMatchers("/**").authenticated() // These urls are allowed by any authenticated user
        .and()
            .httpBasic();
        http.csrf().disable();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        log.info("Setting in-memory security using the user input...");

        String username = null;
        String password = null;

        System.out.println("\nPlease set the admin credentials for this web application (will be required when browsing to the web application)");
        Console console = System.console();

        // Read the credentials from the user console: 
        // Note: 
        // Console supports password masking, but is not supported in IDEs such as eclipse; 
        // thus if in IDE (where console == null) use scanner instead:
        if (console == null) {
            // Use scanner:
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.print("Username: ");
                username = scanner.nextLine();
                System.out.print("Password: ");
                password = scanner.nextLine();
                System.out.print("Confirm Password: ");
                String inputPasswordConfirm = scanner.nextLine();

                if (username.isEmpty()) {
                    System.out.println("Error: user must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: password must be set - please try again");
                } else if (!password.equals(inputPasswordConfirm)) {
                    System.out.println("Error: password and password confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
            scanner.close();
        } else {
            // Use Console
            while (true) {
                username = console.readLine("Username: ");
                char[] passwordChars = console.readPassword("Password: ");
                password = String.valueOf(passwordChars);
                char[] passwordConfirmChars = console.readPassword("Confirm Password: ");
                String passwordConfirm = String.valueOf(passwordConfirmChars);

                if (username.isEmpty()) {
                    System.out.println("Error: Username must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: Password must be set - please try again");
                } else if (!password.equals(passwordConfirm)) {
                    System.out.println("Error: Password and Password Confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
        }

        // Set the inMemoryAuthentication object with the given credentials:
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        if (username != null && password != null) {
            String encodedPassword = passwordEncoder().encode(password);
            manager.createUser(User.withUsername(username).password(encodedPassword).roles("USER").build());
        }
        return manager;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

2

स्वीकृत उत्तर के लिए जोड़ -

यदि पासवर्ड लॉग में दिखाई नहीं देता है, तो "org.springframework.boot.autoconfigure.security" लॉग सक्षम करें।

यदि आप अपने लॉगिंग कॉन्फ़िगरेशन को ट्यून करते हैं, तो सुनिश्चित करें कि INFO संदेशों को लॉग करने के लिए org.springframework.boot.autoconfigure.security श्रेणी सेट की गई है, अन्यथा डिफ़ॉल्ट पासवर्ड प्रिंट नहीं किया जाएगा।

https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/#boot-features-security


0

जब मैंने स्प्रिंग सिक्योरिटी सीखना शुरू किया, तब मैंने कोड स्निपेट में नीचे दिए गए तरीके से उपयोगकर्ताडेलसेल सेवा () को ओवरराइड किया :

@Configuration
@EnableWebSecurity
public class ApplicationSecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/", "/index").permitAll()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }

    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("nimda").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("Spring").password("Security").roles("USER").build());
        return new InMemoryUserDetailsManager(users);
    }
}

तो हम उपर्युक्त क्रेडिट का उपयोग करके आवेदन में लॉग इन कर सकते हैं। (उदा। व्यवस्थापक / निमदा)

नोट: यह हमें उत्पादन में उपयोग नहीं करना चाहिए।


0

अपने प्रोजेक्ट में नीचे के स्निपेट से उपयोगकर्ता नाम और पासवर्ड लेने की कोशिश करें और लॉगिन करें और आशा करें कि यह काम करेगा।

@Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("spring").password("spring").roles("USER").build());
        return new UserDetailsManager(users);
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.