Sending passwords in URL path parameters is not secure for production. Consider using POST with request body or implementing token-based authentication (JWT) instead.
The ContrasenaVO (Contraseña Value Object) encapsulates password validation logic:
public class ContrasenaVO { private final String value; public ContrasenaVO(String value) { if (value == null || value.isEmpty()) { throw new InvalidPasswordException("La contraseña no puede estar vacía"); } if (value.length() < 8) { throw new InvalidPasswordException("La contraseña debe tener al menos 8 caracteres"); } if (value.length() > 64) { throw new InvalidPasswordException("La contraseña no puede superar los 64 caracteres"); } if (!value.matches(".*[A-Za-z].*") || !value.matches(".*\\d.*")) { throw new InvalidPasswordException( "La contraseña debe contener al menos una letra y un número" ); } this.value = value; }}
if (value == null || value.isEmpty()) { throw new InvalidPasswordException("La contraseña no puede estar vacía");}
2
Minimum Length
Password must be at least 8 characters long.
if (value.length() < 8) { throw new InvalidPasswordException( "La contraseña debe tener al menos 8 caracteres" );}
3
Maximum Length
Password cannot exceed 64 characters.
if (value.length() > 64) { throw new InvalidPasswordException( "La contraseña no puede superar los 64 caracteres" );}
4
Complexity Requirements
Password must contain at least one letter and one number.
if (!value.matches(".*[A-Za-z].*") || !value.matches(".*\\d.*")) { throw new InvalidPasswordException( "La contraseña debe contener al menos una letra y un número" );}
The authentication system follows CQRS (Command Query Responsibility Segregation):
Registration (Command)
// CommandRegistrarUsuarioCommand command = new RegistrarUsuarioCommand( request.usuario(), new ContrasenaVO(request.contrasena()));// HandlerregistrarUsuarioHandler.handle(command);
Commands modify state (create new user).
Login (Query)
// QueryLoginUsuarioQuery query = new LoginUsuarioQuery(usuario, contrasena);// HandlerloginUsuarioHandler.handle(query);