Class Usuario

java.lang.Object
Modelo.Usuario
Direct Known Subclasses:
Administrador, Jugador

public abstract class Usuario extends Object
Clase abstracta que representa un usuario del sistema.

Gestiona las credenciales de acceso almacenando la contraseña como hash SHA-256, nunca en texto plano. Las subclases concretas definen el tipo de usuario (normal, administrador, etc.) y amplían su comportamiento según el rol.

La validación de formato y unicidad del username se delega en GestorUsuarios, que tiene acceso al contexto necesario para realizarla.

Version:
1.1
Author:
Adrián
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
    Hash SHA-256 de la contraseña del usuario, en representación hexadecimal.
    protected String
    Identificador único del usuario en el sistema.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Usuario(String username, String password)
    Crea un nuevo usuario a partir de credenciales en texto plano.
    Usuario(String username, String passwordHash, boolean yaEsHash)
    Crea un usuario a partir de datos ya almacenados, típicamente al cargar desde fichero.
  • Method Summary

    Modifier and Type
    Method
    Description
    Devuelve el identificador único del usuario.
    private static String
    hashear(String password)
    Convierte una cadena de texto a su representación SHA-256 en hexadecimal.
    abstract String
    Serializa los datos del usuario en una línea de texto para su almacenamiento en fichero.
    abstract String
    Devuelve una representación legible del usuario para mostrar en pantalla y en logs.
    boolean
    verificarPassword(String introPassword)
    Verifica si la contraseña proporcionada coincide con la almacenada.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • username

      protected String username
      Identificador único del usuario en el sistema.
    • passwordHash

      protected String passwordHash
      Hash SHA-256 de la contraseña del usuario, en representación hexadecimal.
  • Constructor Details

    • Usuario

      public Usuario(String username, String password)
      Crea un nuevo usuario a partir de credenciales en texto plano. La contraseña se hashea con SHA-256 antes de almacenarse.
      Parameters:
      username - identificador único del usuario
      password - contraseña en texto plano; se convertirá a hash internamente
    • Usuario

      public Usuario(String username, String passwordHash, boolean yaEsHash)
      Crea un usuario a partir de datos ya almacenados, típicamente al cargar desde fichero.

      Usar yaEsHash = true cuando el segundo parámetro ya es un hash SHA-256 (por ejemplo, al reconstruir el objeto desde usuarios.txt). Usar yaEsHash = false si se pasa la contraseña en texto plano y debe hashearse.

      Parameters:
      username - identificador único del usuario
      passwordHash - contraseña en texto plano o hash SHA-256, según yaEsHash
      yaEsHash - true si el segundo parámetro ya es un hash SHA-256; false si es texto plano y debe hashearse
  • Method Details

    • hashear

      private static String hashear(String password)
      Convierte una cadena de texto a su representación SHA-256 en hexadecimal.

      SHA-256 está garantizado en toda JVM estándar, por lo que NoSuchAlgorithmException no debería lanzarse nunca en la práctica.

      Parameters:
      password - texto a hashear
      Returns:
      cadena hexadecimal de 64 caracteres con el hash SHA-256
      Throws:
      RuntimeException - si SHA-256 no está disponible en la JVM
    • getUsername

      public String getUsername()
      Devuelve el identificador único del usuario.
      Returns:
      el username de este usuario
    • verificarPassword

      public boolean verificarPassword(String introPassword)
      Verifica si la contraseña proporcionada coincide con la almacenada.

      La comparación se realiza entre hashes SHA-256, nunca entre textos en claro.

      Parameters:
      introPassword - contraseña en texto plano introducida por el usuario
      Returns:
      true si la contraseña es correcta; false en caso contrario
    • toArchivo

      public abstract String toArchivo()
      Serializa los datos del usuario en una línea de texto para su almacenamiento en fichero.

      Formato base: username;passwordHash;esAdmin. Las subclases deben respetar el separador ; y el orden de campos para garantizar compatibilidad con PersistenciaArchivos.

      Returns:
      cadena con los datos del usuario listos para escribir en usuarios.txt
    • toString

      public abstract String toString()
      Devuelve una representación legible del usuario para mostrar en pantalla y en logs. Cada subclase define el formato apropiado a su rol.
      Overrides:
      toString in class Object
      Returns:
      representación textual del usuario