@Entity
@Table(name = "usuarios")
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 void setLogin(String login) {
this.login = login;
}
public void setContrasena(String contrasena) {
this.contrasena = contrasena;
}
}
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);
}
}
@Configuration
@EnableWebSecurity
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();
}
}
@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());
manager.authenticate(token);
return ResponseEntity.ok().build();
}
}
public record DatosAutenticacion(String login, String contrasena) {
}
@Service
public class CrearUsuarioService {
@Autowired
private UsuarioRepository repository;
@Autowired
private PasswordEncoder passwordEncoder;
public void crearUsuario() {
Usuario usuario = new Usuario();
usuario.setLogin("jeimy.flores@voll.med");
usuario.setContrasena(passwordEncoder.encode("123456"));
repository.save(usuario);
}
}