Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

CSFR

Hola

El método "csfr" el IDE lo marca como obsoleto y ahí si que no se que hacer:

public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
    httpSecurity
            .csrf().disable() 
            .sessionManagement(session -> session
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // Configuración de sesión sin estado
            .authorizeRequests(auth -> auth
                    .anyRequest().authenticated()); // Requiere autenticación para todas las solicitudes

    return httpSecurity.build();
3 respuestas

Hola Estudiante, espero que estés bien

Entiendo tu preocupación. Parece que estás teniendo problemas con el método "csfr" que el IDE marca como obsoleto. En realidad, lo que estás intentando hacer es deshabilitar la protección CSRF (Cross-Site Request Forgery) en tu configuración de seguridad.

En versiones más recientes de Spring Security, el método "csrf()" ha sido marcado como obsoleto y se recomienda utilizar "csrf().disable()" para deshabilitar la protección CSRF.

Por lo tanto, en tu código, estás haciendo lo correcto al utilizar ".csrf().disable()" para deshabilitar la protección CSRF en tu configuración de seguridad.

Aunque el IDE marque el método como obsoleto, en este caso es la forma correcta de deshabilitar la protección CSRF en Spring Security.

Espero que esto aclare tus dudas. ¡Sigue adelante con tu desarrollo en Spring Boot!

Espero haber ayudado y buenos estudios!

Además, en las versiones más recientes de Spring Security, la configuración de CSRF ha cambiado, y ahora se puede manejar de manera más flexible.

Si estás utilizando una versión de Spring Security más moderna (5.x o 6.x), la configuración de CSRF puede hacerse de la siguiente manera para habilitar o deshabilitar la protección, o personalizarla si es necesario.

Para habilitar la protección CSRF (que es el comportamiento por defecto), puedes configurarlo de esta forma:

http
    .csrf(csrf -> csrf
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
    );

Esto configura CSRF para usar un CookieCsrfTokenRepository, que almacena el token CSRF en una cookie. Esta configuración es útil si estás trabajando con aplicaciones SPA (Single Page Applications) o aquellas que requieren que el token esté accesible para JavaScript.

Si necesitas configurar CSRF con métodos más personalizados, puedes usar un CsrfTokenRepository distinto o ajustar el comportamiento con filtros adicionales.

Ejemplo de configuración avanzada:

http
    .csrf(csrf -> csrf
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        .ignoringAntMatchers("/api/auth/**")  // Ignora CSRF para ciertas rutas
    )
    .authorizeRequests()
        .antMatchers("/api/**").authenticated()
        .anyRequest().permitAll();

Este código habilita CSRF con un repositorio de token basado en cookies y permite personalizar las rutas que no requieren protección CSRF (por ejemplo, las rutas de autenticación).

Con estas configuraciones, puedes manejar la protección CSRF de forma más moderna y ajustada a tus necesidades.

Hola Brenda

Muchas gracias por la ayuda y la explicación, la versión de spring security es 5.7.5 y la versión de Spring boot es 3.3.5, osea yo entiendo que hay resiliencia no emocional pero si hay compatibilidad técnica, eso por lo menos dicen las escrituras cuando consulto en https://stackoverflow.com/. Yo me declaro incompetente y muy ignorante por que ahora después de tanto deliberar el error mutó a "Cannot resolve method 'sessionCreationPolicy' in 'SessionManagementSpec" y esto me supera.

Así se ve la clase SecurityConfiguration que es calcada a la vista en clases o mejor dicho en los videos:

Saludos

package med.voll.api.infra.security;

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 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.reactive.EnableWebFluxSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.config.web.server.ServerHttpSecurity; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.server.SecurityWebFilterChain;

import javax.swing.plaf.PanelUI;

@Configuration @EnableWebFluxSecurity public class SecurityConfigurations {

@Bean
public SecurityWebFilterChain securityFilterChain(ServerHttpSecurity http) {
    http
            .csrf(csrf -> csrf.disable())  // Deshabilitar CSRF para APIs
            .sessionManagement(session -> session // Aquí está el objeto session
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // Configuración de sesión sin estado
            .authorizeExchange(authorize -> authorize
                    .anyExchange().authenticated()); // Requiere autenticación para cualquier intercambio

    return http.build();
}

@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
        throws    Exception {
    return authenticationConfiguration.getAuthenticationManager();

}

}