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

Haga lo que hicimos: Autenticación API

Primero, agrego Spring Security al proyecto, en el pom.xml:

org.springframework.boot spring-boot-starter-security org.springframework.security spring-security-test test

public class Usuario implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
private String contrasena;

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return List.of(new SimpleGrantedAuthority("ROLE_USER"));
}

@Override
public String getPassword() {
    return contrasena;
}

@Override
public String getUsername() {
    return login;
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}

}

public interface UsuarioRepository extends JpaRepository<Usuario, Long> {
UserDetails findByLogin(String login);
}
@Service
public class AutenticacionService implements UserDetailsService {

@Autowired
private UsuarioRepository repository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    return repository.findByLogin(username);
}

}

public class SecurityConfigurations {

@Bean

public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(csrf -> csrf.disable())
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.build();
}

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

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

}
Copia el código
Finalmente, deberá crear una clase Controller y un DTO para manejar las solicitudes de autenticación en la API:

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

@Autowired
private AuthenticationManager manager;

@PostMapping
public ResponseEntity iniciarSesion(@RequestBody @Valid DatosAutenticacion datos) {
    var token = new UsernamePasswordAuthenticationToken(datos.login(), datos.contrasena());
    var authenticaon = manager.authenticate(token);

    return ResponseEntity.ok().build();
}

}
Copia el código
public record DatosAutenticacion(String login, String contrasena) {
}
Copia el código
Para probar la autenticación, deberá insertar un registro de usuario en su base de datos, en la tabla de usuarios:

insert into usuarios values(1, 'jeimy.flores@voll.med',aMFOxteibQE