Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

'org.springframework.security.authentication.AuthenticationManager' that could not be found.

tengo este error y tengo el codigo identico que al instructor, pero no le hayo que puede ser.

esta es mi clase; package med.voll.api.controller;

import jakarta.validation.Valid; import med.voll.api.infra.security.DatosJWTToken; import med.voll.api.infra.security.TokenServices; import med.voll.api.usuarios.DatosAutenticacionUsuario; import med.voll.api.usuarios.Usuario; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

@RestController @RequestMapping("/login") public class AutenticacionController {

@Autowired
private AuthenticationManager authenticationManager;



@Autowired
private TokenServices tokenService;

@PostMapping
public ResponseEntity autenticarUsuario(@RequestBody @Valid DatosAutenticacionUsuario datosAutenticacionUsuario) {
    Authentication authToken = new UsernamePasswordAuthenticationToken(datosAutenticacionUsuario.login(),
            datosAutenticacionUsuario.clave());
    var usuarioAutenticado = authenticationManager.authenticate(authToken);
    var JWTtoken = tokenService.generarToken((Usuario) usuarioAutenticado.getPrincipal());
    return ResponseEntity.ok(new DatosJWTToken(JWTtoken));
}

}

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-09-26T17:57:25.837-06:00 ERROR 8560 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Field authenticationManager in med.voll.api.controller.AutenticacionController required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.

The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'org.springframework.security.authentication.AuthenticationManager' in your configuration.

Process finished with exit code 1

2 respuestas

Hola Mirna,

El error que estás viendo indica que Spring no puede encontrar una implementación de AuthenticationManager para inyectarla en tu controlador AutenticacionController.

En Spring Security, AuthenticationManager es una interfaz y necesitas proporcionar una implementación de esta interfaz. La implementación más comúnmente utilizada es ProviderManager.

Aquí hay un ejemplo de cómo puedes configurar un AuthenticationManager en tu clase de configuración de seguridad:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private MyUserDetailsService userDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

En este ejemplo, MyUserDetailsService es una implementación de UserDetailsService que carga detalles de usuario específicos de tu aplicación.

Por favor, revisa tu código y asegúrate de que tienes una configuración de seguridad similar a la que te mostré. Si ya tienes una configuración de seguridad, asegúrate de que estás definiendo un bean para AuthenticationManager como en el ejemplo.

¡Saludos!

Si este post te ayudó, por favor marca como solucionado ✓. ¡Continúa con tus estudios!
solución!

Si gracias, ya vi que me salte un par de videso y ahi los explica Diego en el nivel 3 del curso.

LAs disculpas del caso.