Eliminar “Usar contraseña de seguridad predeterminada” en Spring Boot

6 minutos de lectura

avatar de usuario
carlosalberto

Agregué una configuración de seguridad personalizada en mi aplicación en Spring Boot, pero el mensaje sobre “Usar contraseña de seguridad predeterminada” todavía está en el archivo LOG.

¿Hay alguno para quitarlo? No necesito esta contraseña predeterminada. Parece que Spring Boot no reconoce mi política de seguridad.

@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {

    private final String uri = "/custom/*";

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.headers().httpStrictTransportSecurity().disable();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        // Authorize sub-folders permissions
        http.antMatcher(uri).authorizeRequests().anyRequest().permitAll();
    }
}

  • ¿Está esta clase en el paquete correcto y, por lo tanto, se puede encontrar? Cometí este error hace algunos meses… ¿Sería suficiente establecer la contraseña en un valor conocido (supongo que no…)?

    – Marged

    10 de junio de 2015 a las 15:56

  • Tal vez usted tiene un problema similar al que yo tuve. Tuve suerte y el Sr. Syer me dio la respuesta 😉 stackoverflow.com/questions/27981681/…

    – Marged

    10 de junio de 2015 a las 15:57


  • Hay otra clase de configuración que importa esta configuración de seguridad @Import({ CustomSecurityConfig .class }). Esta clase es escaneada por Spring Boot, lo que noté en otro caso relacionado con la seguridad de CAS, Spring Boot solo eliminó este mensaje cuando hice @Inject public void configureGlobal (final AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {

    – Carlos Alberto

    10 de junio de 2015 a las 17:04


  • Intenté agregar security.basic.enabled=false y nada cambió.

    – Carlos Alberto

    10 de junio de 2015 a las 17:07

  • La respuesta correcta es: paquete incorrecto. Este error surge cuando copia una carpeta y la pega en su proyecto. Puede refactorizar la carpeta al paquete correcto y listo.

    – Nguyên Ngô Duy

    26 de noviembre de 2020 a las 2:12

Encontré una solución para excluir SeguridadAutoConfiguración clase.

Ejemplo:

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

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

  • El único inconveniente de esta solución es que deshabilita la capacidad de leer las propiedades de seguridad de application.properties, por lo que debe controlarse después.

    – Carlos Alberto

    11 de junio de 2015 a las 3:05

  • Me pregunto: ¿Cuál es el punto de agregar Spring Security a Boot, que en realidad tiene una buena configuración automática y luego deshabilitar todo? ¿Incluso considerando simplemente desactivar el registro? ¿Quieres seguridad? Creo que sí. ¿Quieres una contraseña generada por defecto? Tal vez no… Entonces, ¿por qué no especificas uno? Simplemente use esas propiedades: security.user.name=user # Nombre de usuario predeterminado. security.user.password= # Contraseña para el nombre de usuario predeterminado. Una contraseña aleatoria se registra en el inicio de forma predeterminada. O ejecute su propio UserDetailsService…

    – Michael Simons

    10/04/2016 a las 16:43


  • @MichaelSimons… Gracias por la respuesta. Es mejor tener la cosa en el archivo de propiedades en lugar de en los registros. En ese caso, también puede cifrarlo. Gracias una vez más.

    – Atul

    4 de marzo de 2019 a las 18:18

  • @MichaelSimons Por ejemplo, en mi proyecto en curso, solo usamos un grupo de usuarios de terceros: AWS Cognito. Por lo tanto, no necesitamos el servicio de usuario configurado automáticamente de Spring. Solo usamos tokens proporcionados por Cognito. Así que excluí ReactiveUserDetailsServiceAutoConfiguration.class de la aplicación (ya que usamos webflux)

    – alexkov

    6 de agosto de 2019 a las 12:34

  • Un gran ejemplo de una respuesta completamente incorrecta que tiene millones de puntos

    – amseager

    27 de noviembre de 2020 a las 13:27

Usando Spring Boot 2.0.4 me encontré con el mismo problema.

Excluyendo SecurityAutoConfiguration.class destruyó mi aplicación.

ahora estoy usando @SpringBootApplication(exclude= {UserDetailsServiceAutoConfiguration.class})

funciona bien con @EnableResourceServer y JWT :)

  • ¿Puedes explicar dónde escribir este código, por favor? y lo que quiere decir con “funciona bien con @EnableResourceServer y JWT” (soy nuevo en spring boot y jwt) ¡Gracias!

    – Gel

    6 de junio de 2019 a las 16:31

  • Para mí, funcionó con esta exclusión en @EnableAutoConfiguration en lugar de @SpringBootApplication (SpringBoot 2.3.0): @SpringBootApplication @EnableAutoConfiguration(exclude={UserDetailsServiceAutoConfiguration.class}) public class MainAppClassName { ... }

    – Felipe de Alvarenga Leite

    29 de julio de 2020 a las 16:02

  • @EnableAutoConfiguration es parte de @SpringBootApplication.

    – mono_saltando

    21 de agosto de 2020 a las 8:53

Agregar lo siguiente en application.properties trabajó para mi,

security.basic.enabled=false

Recuerda reiniciar la aplicación y verificar en la consola.

  • solo comparte mi solución aquí, management.security.enabled=falsey estoy usando Spring 1.5.4 RELEASE.

    – suiwenfeng

    25 de julio de 2017 a las 14:52


  • A partir de (al menos) Spring Boot 2, esto ya no funciona.

    – Tobías

    21 de marzo de 2018 a las 9:37

  • @Tobias sí, tienes razón. ¿Tienes una solución para Spring Boot 2?

    – mor222

    15 de junio de 2018 a las 8:30

  • @ mor222 la solución de Stefan a continuación lo hizo por mí.

    – Tobías

    16 de junio de 2018 a las 8:58

  • @ mor222 Agregué otra opción que funcionó para mí en las respuestas. stackoverflow.com/a/51414492/1195507 Estoy usando Spring Boot 2.0

    – rvazquezglez

    19 de julio de 2018 a las 4:46

avatar de usuario
stefano

Aunque funciona, la solución actual es un poco exagerada, como se indica en algunos comentarios. Entonces, aquí hay una alternativa que funciona para mí, usando el último Spring Boot (1.4.3).

La contraseña de seguridad predeterminada se configura dentro de Spring Boot Configuración del administrador de autenticación clase. Esta clase tiene una anotación condicional para evitar que se cargue si ya se ha definido un bean AuthenticationManager.

El siguiente código funciona para evitar la ejecución del código dentro de AuthenticationManagerConfiguration porque definimos nuestro AuthenticationManager actual como un bean.

@Configuration
@EnableWebSecurity
public class MyCustomSecurityConfig extends WebSecurityConfigurerAdapter{

[...]

@Override
protected void configure(AuthenticationManagerBuilder authManager) throws Exception {
    // This is the code you usually have to configure your authentication manager.
    // This configuration will be used by authenticationManagerBean() below.
}

@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    // ALTHOUGH THIS SEEMS LIKE USELESS CODE,
    // IT'S REQUIRED TO PREVENT SPRING BOOT AUTO-CONFIGURATION
    return super.authenticationManagerBean();
}

}

Para Reactive Stack (Spring Webflux, Netty), debe excluir ReactiveUserDetailsServiceAutoConfiguration.class

@SpringBootApplication(exclude = {ReactiveUserDetailsServiceAutoConfiguration.class})

O defina el bean ReactiveAuthenticationManager (hay diferentes implementaciones, aquí está el ejemplo de JWT)

@Bean
public ReactiveJwtDecoder jwtDecoder() {
    return new NimbusReactiveJwtDecoder(keySourceUrl);
}
@Bean
public ReactiveAuthenticationManager authenticationManager() {
    return new JwtReactiveAuthenticationManager(jwtDecoder());
}

avatar de usuario
Mykyta Chelombitko

Simplemente use las filas a continuación:

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

para establecer el nombre de usuario y la contraseña de seguridad predeterminados en su application.properties (el nombre puede diferir) dentro del contexto de la aplicación Spring.

Para evitar la configuración predeterminada (como parte de la configuración automática de SpringBoot), utilice el enfoque mencionado anteriormente en Respuestas:

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })

o

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class })

avatar de usuario
Ivonet

Para eliminar el usuario predeterminado, debe configurar el administrador de autenticación sin usuarios, por ejemplo:

@configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication();
    }
}

esto eliminará el mensaje de contraseña predeterminado y el usuario predeterminado porque en ese caso está configurando InMemoryAuthentication y no especificará ningún usuario en los próximos pasos

¿Ha sido útil esta solución?