De WebSecurityConfigurerAdapter a SecurityFilterChain con Lambdas
En Spring Security 6 ya no se extiende de clases base obsoletas. Se expone un @Bean public SecurityFilterChain filterChain(HttpSecurity http) donde cada regla (autorización, csrf, sessionManagement) se define con lambdas fluidas sin encadenamientos rotos con .and().
En una línea http.csrf(csrf -> csrf.disable()).authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll().anyRequest().authenticated());
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
class SeguridadConfig {
@Bean
SecurityFilterChain api(HttpSecurity http) throws Exception {
return http
.securityMatcher("/api/**")
.csrf(csrf -> csrf.disable()) // token en cabecera, no en cookie
.sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers(HttpMethod.POST, "/api/auth/login").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.GET, "/api/tareas/**").hasAuthority("SCOPE_tareas:leer")
.anyRequest().authenticated()) // siempre al final
.oauth2ResourceServer(o -> o.jwt(Customizer.withDefaults()))
.exceptionHandling(e -> e
.authenticationEntryPoint(new BearerTokenAuthenticationEntryPoint()) // 401
.accessDeniedHandler(new BearerTokenAccessDeniedHandler())) // 403
.build();
}
}
Cómo funciona por dentro
Spring Security 6 eliminó WebSecurityConfigurerAdapter. La configuración se declara ahora como un bean SecurityFilterChain construido con HttpSecurity, y el DSL usa lambdas en lugar de encadenar .and(). El resultado es más legible y permite tener varias cadenas, por ejemplo una para /api/** sin estado y otra para una consola web con sesión, ordenadas con @Order.
Las reglas de authorizeHttpRequests se evalúan en orden y gana la primera que coincide, así que las más específicas van primero y se termina con anyRequest(). Un error frecuente es poner anyRequest().authenticated() al principio y que nunca se evalúen las demás.
Para una API REST sin estado, lo típico es desactivar la sesión (STATELESS), desactivar CSRF (si el token viaja en una cabecera, no en una cookie) y configurar el servidor de recursos OAuth2 para validar JWT.
extends WebSecurityConfigurerAdapter o el método .and().
Se conecta con Spring Bean ContainerDSL FluidaFiltros HTTP