Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos: Autenticación API

@Table(name = "usuarios")
@Entity(name = "Usuario")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
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;
    }
}
1 respuesta

Hola Justin,

Gracias por compartir tu código. Veo que estás implementando la clase Usuario que extiende UserDetails para manejar la autenticación en tu aplicación Spring Boot. Todo parece estar en orden en cuanto a la implementación de los métodos necesarios de la interfaz UserDetails.

Aquí tienes algunas sugerencias para mejorar la seguridad de tu aplicación:

  1. Cifrado de Contraseñas: Asegúrate de que las contraseñas no se almacenen en texto plano en la base de datos. Utiliza un algoritmo de hash seguro como BCrypt para cifrar las contraseñas antes de almacenarlas. Puedes hacerlo utilizando la clase BCryptPasswordEncoder de Spring Security.

    Ejemplo:

    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String hashedPassword = passwordEncoder.encode(contrasena);
    
  2. Roles y Permisos: Actualmente, estás asignando un rol fijo "ROLE_USER". Considera implementar una estructura de roles más flexible si tu aplicación requiere diferentes niveles de acceso.

  3. Validaciones Adicionales: Aunque has implementado los métodos de UserDetails, considera agregar validaciones adicionales en tu lógica de negocio para manejar casos como la desactivación de cuentas o el bloqueo después de múltiples intentos fallidos de inicio de sesión.

Espero que estas sugerencias te sean útiles y te ayuden a mejorar la seguridad de tu aplicación.

¡Espero haber ayudado y buenos estudios!