java - tutorial - spring security rules
Spring Boot 2.0.x deshabilita la seguridad para cierto perfil (5)
Así es como terminé resolviendo el problema.
Aquí hay un ejemplo de cómo se veía mi configuración de seguridad en Spring Boot 1.5.x.
La seguridad se deshabilitó con la propiedad
security.basic.enabled=false
:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/upload/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
Dado que
security.basic.enabled
se eliminó en Spring Boot 2 (pero aún reservado como nombre de propiedad), terminé usando
security.enabled
como una propiedad personalizada.
Aquí hay un ejemplo de cómo se ve mi configuración en Spring Boot 2:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${security.enabled:true}")
private boolean securityEnabled;
@Override
public void configure(WebSecurity web) throws Exception {
if (securityEnabled)
web.ignoring().antMatchers("/upload/**");
else
web.ignoring().antMatchers("/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (securityEnabled)
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
En Spring Boot 1.5.x, configuré la seguridad y en ciertos perfiles (por ejemplo, local), agregué la línea
security.basic.enabled=false
al archivo .properties para deshabilitar toda la seguridad de ese perfil.
Estoy tratando de migrar al nuevo Spring Boot 2, donde se elimina esa propiedad de configuración.
¿Cómo puedo lograr el mismo comportamiento (sin usar esta propiedad) en Spring Boot 2.0.x?
Ya leí Spring-Boot-Security-2.0 y security-changes-in-spring-boot-2-0-m4 y no hay nada con respecto a esta propiedad.
Debe agregar una configuración personalizada de Spring Security, consulte la Guía de referencia de Spring Boot :
28.1 Seguridad MVC
La configuración de seguridad predeterminada se implementa en
SecurityAutoConfiguration
yUserDetailsServiceAutoConfiguration
.SecurityAutoConfiguration
importaSpringBootWebSecurityConfiguration
para seguridad web yUserDetailsServiceAutoConfiguration
configura la autenticación, que también es relevante en aplicaciones no web. Para desactivar completamente la configuración de seguridad de la aplicación web predeterminada, puede agregar un bean de tipoWebSecurityConfigurerAdapter
(hacerlo no deshabilita la configuración deUserDetailsService
o la seguridad del Actuador).
Por ejemplo:
@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/**");
}
}
Para usar la configuración solo para un perfil, agregue
@Profile
a la clase.
Si desea habilitarlo por propiedad, agregue
ConditionalOnProperty
a la clase.
En realidad, hay varias respuestas para ciertas configuraciones para esta pregunta;
en mi caso, he estado jugando Spring Boot 2 con Spring Security y JWT.
Para asegurar mis puntos finales REST, necesito crear tokens, etc. Después de escribir mi código e intentar probar mis puntos finales para ver si JWT funciona bien, termino frente a la página de inicio de sesión predeterminada.
Intenté cambiar el archivo de propiedades mencionado anteriormente y finalmente lo deshabilité agregando la
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
a mi clase de aplicación.
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(JwtWithSpringBootApplication.class, args);
}
}
En springboot 2.1.4 tuve que hacer esto
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})
Hay otra opción para deshabilitar la seguridad en Spring Boot 2
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
Agregue esto sobre la clase principal