Quel est le nom d’utilisateur et le mot de passe lors du démarrage de Spring Boot avec Tomcat?

Lorsque je déploie mon application Spring via Spring Boot et que localhost:8080 à localhost:8080 je dois m’authentifier, mais quel est le nom d’utilisateur et le mot de passe ou comment le définir? J’ai essayé d’append ceci à mon fichier tomcat-users mais cela n’a pas fonctionné:

   

C’est le sharepoint départ de l’application:

 @SpringBootApplication public class Application extends SpringBootServletInitializer { public static void main(Ssortingng[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } } 

Et c’est la dépendance Tomcat:

  org.springframework.boot spring-boot-starter-tomcat provided  

Comment s’authentifier sur localhost:8080 ?

Je pense que vous avez la sécurité Spring sur votre chemin de classe et que la sécurité Spring est automatiquement configurée avec un utilisateur par défaut et un mot de passe généré.

Veuillez regarder dans votre fichier pom.xml pour:

  org.springframework.boot spring-boot-starter-security  

Si vous avez cela dans votre pom que vous devriez avoir un message de la console de journal comme ceci:

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

Et à l’invite du navigateur, vous importerez l’ user et le mot de passe imprimés dans la console.

Ou si vous voulez configurer la sécurité du spring, vous pouvez jeter un coup d’œil à l’ exemple sécurisé de Spring Boot

Il est expliqué dans la documentation Spring Boot Reference de la section Sécurité , il indique:

 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 

Si spring-security fichiers jar de spring-security sont ajoutés dans classpath et également s’il s’agit d’ spring-boot application spring-boot , tous les noeuds finaux http seront sécurisés par la classe de configuration de sécurité par défaut SecurityAutoConfiguration

Cela provoque une fenêtre contextuelle du navigateur pour demander des informations d’identification.

Le changement de mot de passe pour chaque application redémarre et peut être trouvé dans la console.

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

Pour append votre propre couche de sécurité d’application devant les valeurs par défaut,

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

ou si vous voulez juste changer le mot de passe, vous pouvez remplacer par défaut avec,

application.xml

security.user.password = new_password

ou

application.properties

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

Ainsi, en ajoutant simplement la dépendance de démarrage de sécurité de démarrage par ressort, la sécurité de base a déjà été configurée par défaut.

entrer la description de l'image ici

Nous pouvons personnaliser la configuration de la sécurité en écrivant nos propres permissions et authentifications. Pour cela, créez une nouvelle classe SecurityConfig qui étend WebSecurityConfigurerAdapter et remplace ses méthodes.

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

Ref – Exemple de sécurité de démarrage au spring

Vous pouvez également demander à l’utilisateur les informations d’identification et les configurer dynamicment une fois le serveur démarré (très efficace lorsque vous devez publier la solution dans un environnement client):

 @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); Ssortingng inputUser = null; Ssortingng 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: "); Ssortingng 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) Une mise à jour – cela fonctionnera sur le démarrage du spring 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..."); Ssortingng username = null; Ssortingng 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: "); Ssortingng 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 = Ssortingng.valueOf(passwordChars); char[] passwordConfirmChars = console.readPassword("Confirm Password: "); Ssortingng passwordConfirm = Ssortingng.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) { Ssortingng encodedPassword = passwordEncoder().encode(password); manager.createUser(User.withUsername(username).password(encodedPassword).roles("USER").build()); } return manager; } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } 

Si vous ne trouvez pas le mot de passe basé sur d’autres réponses pointant vers une réponse par défaut, le libellé du message de journal dans les versions récentes a été remplacé par

 Using generated security password: