wake-up-neo.com

Was ist Benutzername und Passwort, wenn Sie Spring Boot mit Tomcat starten?

Wenn ich meine Spring-Anwendung über Spring Boot bereitstellen und auf localhost:8080 zugreifen muss, muss ich mich authentifizieren, aber wie lautet der Benutzername und das Kennwort. Wie kann ich es festlegen? Ich habe versucht, dies meiner Tomcat-users-Datei hinzuzufügen, aber es hat nicht funktioniert: 

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

Dies ist der Ausgangspunkt der Bewerbung:

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

Und das ist die Tomcat-Abhängigkeit:

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

Wie authentifiziere ich mich bei localhost:8080?

79
Gustavo

Ich denke, Sie haben Spring Security in Ihrem Klassenpfad und dann wird die Spring-Sicherheit automatisch mit einem Standardbenutzer und einem generierten Kennwort konfiguriert

Bitte schauen Sie in Ihrer pom.xml-Datei nach:

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

Wenn Sie das in Ihrem Pom haben, sollten Sie eine Log-Konsolennachricht wie diese haben:

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

In der Browser-Eingabeaufforderung importieren Sie den Benutzer user und das in der Konsole aufgedruckte Kennwort.

Oder, wenn Sie die Federsicherheit konfigurieren möchten, können Sie einen Blick auf Spring Boot gesichert Beispiel

Es wird in der Spring Boot Reference-Dokumentation im Abschnitt Security erläutert. Es gibt Folgendes an:

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
176
Marcel Dias

Wenn spring-security-JARS in classpath hinzugefügt werden und auch spring-boot-Anwendung ist, werden alle http-Endpunkte durch die standardmäßige Sicherheitskonfigurationsklasse SecurityAutoConfiguration gesichert. 

Dies bewirkt, dass ein Browser-Popup nach Anmeldeinformationen fragt.

Das Kennwort wird für jede Anwendung neu gestartet und befindet sich in der Konsole.

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

Um Ihre eigene Anwendungssicherheit vor den Standardeinstellungen hinzuzufügen,

@EnableWebSecurity
public class SecurityConfig {

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

oder wenn Sie nur das Passwort ändern möchten, können Sie die Standardeinstellung mit überschreiben,

application.xml

security.user.password = neues Kennwort

oder

application.properties

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

Indem Sie lediglich die Starthilfe-Starthilfe für Spring Boot hinzufügen, ist die grundlegende Sicherheit bereits standardmäßig konfiguriert. 

enter image description here

Wir können die Sicherheitskonfiguration anpassen, indem wir unsere eigene Autorisierung und Authentifizierung schreiben. Erstellen Sie dazu eine neue Klasse SecurityConfig, die den WebSecurityConfigurerAdapter erweitert und seine Methoden überschreibt.

@Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("javainuse")
                .password("javainuse").roles("USER");
    }

Ref - Spring Boot-Sicherheitsbeispiel

6
Gordan

Zusatz zur akzeptierten Antwort -

Wenn das Kennwort in den Protokollen nicht angezeigt wird, aktivieren Sie die Protokolle "org.springframework.boot.autoconfigure.security".

Wenn Sie Ihre Protokollierungskonfiguration optimieren, stellen Sie sicher, dass in der Kategorie org.springframework.boot.autoconfigure.security die Option zum Protokollieren von INFO-Nachrichten festgelegt ist. Andernfalls wird das Standardkennwort nicht gedruckt.

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

1
Ninad Pingale

Sie können den Benutzer auch nach den Anmeldeinformationen fragen und diese beim Start des Servers dynamisch festlegen (sehr effektiv, wenn Sie die Lösung in einer Kundenumgebung veröffentlichen möchten):

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

(Mai 2018) Ein Update - dies funktioniert mit Spring Boot 2.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();
    }
}
1
Naor Bar

Wenn Sie das Kennwort nicht anhand anderer Antworten finden können, die auf ein Standardwort verweisen, wurde die Protokollnachricht in den letzten Versionen in geändert

Using generated security password: <some UUID>
0
gdecaso

Beim Übersteuern

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

in application.properties brauchen Sie " nicht um "username" herum, verwenden Sie einfach username. Ein weiterer Punkt, anstatt das Rohkennwort zu speichern , verschlüsseln Sie es mit bcrypt/scrypt und speichern Sie es wie

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