package com.example.fercoganbackend.configuration; import com.example.fercoganbackend.service.UsuarioDetailsService; import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; 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.configurers.AbstractHttpConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration public class SecurityConfig { private final UsuarioDetailsService usuarioDetailsService; public SecurityConfig(UsuarioDetailsService usuarioDetailsService) { this.usuarioDetailsService = usuarioDetailsService; } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(auth -> auth .requestMatchers("/auth/**").permitAll() .requestMatchers("/favicon.ico", "/error", "/static/**", "/ws/contador/**", "contador/**", "/api/**").permitAll() .requestMatchers("/admin/**").hasAnyAuthority("SUPER_USUARIO","ADMIN") .anyRequest().authenticated() ) .httpBasic(httpBasic -> httpBasic .authenticationEntryPoint((request, response, authException) -> { // Log del fallo de autenticación System.out.println("Fallo de autenticación: " + authException.getMessage()); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage()); }) ); return http.build(); } }