Solución:
Spring Boot 2.0 cambió su configuración automática (incluidas algunas propiedades) y ahora tiene un comportamiento único que se detiene tan pronto como agrega su propio WebSecurityConfigurerAdapter. La configuración predeterminada se parece a
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
Un único usuario con una contraseña generada está configurado de forma predeterminada. Para personalizar este usuario use las propiedades debajo spring.security.user
.
spring.security.user.name=user # Default user name.
spring.security.user.password= # Password for the default user name.
spring.security.user.roles= # Granted roles for the default user name.
Las siguientes propiedades se han eliminado a partir de Spring Boot 2:
security.basic.authorize-mode
security.basic.enabled
security.basic.path
security.basic.realm
security.enable-csrf
security.headers.cache
security.headers.content-security-policy
security.headers.content-security-policy-mode
security.headers.content-type
security.headers.frame
security.headers.hsts
security.headers.xss
security.ignored
security.require-ssl
security.sessions
Los reemplazos (si existen) se pueden encontrar aquí: Apéndice A. Propiedades comunes de la aplicación
Para ser claros: si crea un WebSecurityConfigurerAdapter personalizado, la configuración de seguridad predeterminada se reemplazará con su configuración personalizada:
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// For example: Use only Http Basic and not form login.
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
Para obtener más información, visite la Guía de migración de Spring 2.0.
Esto es porque cuando escribes security.basic.enabled = false
básicamente le dices a la aplicación que no me importa la seguridad y permites todas las solicitudes. Después de Spring Boot 2.0, no puede simplemente escribir esa configuración para hacer que la aplicación sea insegura. Necesitas escribir un código para hacer eso. O simplemente puede copiar lo siguiente.
package com.LockheedMartin.F22Simulator;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll();
}
}
Por cierto, deberías eliminar security.basic.enabled = false
desde su application.properties, como spring 2.*.*
ya no comprende esa propiedad y si tiene la configuración adecuada de Intellij, debería ver una advertencia que dice 'unsupported property'
.
Si está utilizando Spring reactive Security, debemos hacer algo como esto,
@Bean
public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
http.authorizeExchange().anyExchange().permitAll();
return http.build();
}
También hay otra publicación de stackoverflow sobre esto, Spring boot 2.0 deshabilita la seguridad predeterminada