Java User Manager


A comprehensive Java-based backend system for managing user authentication, product licensing, and session management. Designed as a secure, scalable solution for software distribution and user access control.


Overview


User Manager is a complete user management server that handles user registration, authentication, license key distribution, product downloads, and administrative functions. It provides a RESTful HTTP API for client applications and includes advanced features like hardware ID (HWID) binding, ban management, session tracking, and changelog management.


Project Background


This project was created at the request of a friend who needed a management system for his users. The system was designed to use JSON files for data handling, as the client was unfamiliar with database systems and preferred a simpler, file-based approach that could be manually inspected and edited when needed.

Given that development occurred in my free time, the system was deployed to production incrementally—long before all planned features were complete. This practical constraint influenced several design decisions: the JSON-based storage allows for direct file manipulation when administrative features weren't yet implemented, and the modular architecture enables gradual feature additions without disrupting the running system.

As this is the only project in my portfolio that has been deployed in a real-world production environment, comprehensive tests were added to ensure reliability and correctness in active use. The system has been successfully serving real users and handling actual license distribution since deployment.


Features



User Management



License Key System



Product Management



Security & Administration



Logging & Configuration



Technical Architecture



Core Components


Network Layer (de.lukas.eternalUserManager.network)

Available Endpoints:

Logic Layer (de.lukas.eternalUserManager.logic)

Data Layer (de.lukas.eternalUserManager.data)

Utility Components (de.lukas.eternalUserManager.utils)


Project Structure


src/
├── de/lukas/eternalUserManager/
│   ├── Main.java                    # Application entry point
│   ├── data/                        # Data persistence layer
│   │   ├── DataManager.java         # Central data operations
│   │   ├── IDataStorage.java        # Storage interface
│   │   ├── DefaultDataStorage.java  # File system storage
│   │   ├── MountedDataStorage.java  # Path abstraction
│   │   ├── BufferedDataStorage.java # Caching layer
│   │   └── JsonDataBundle.java      # JSON utilities
│   ├── logic/                       # Business logic
│   │   ├── Config.java              # Server configuration
│   │   ├── banList/                 # Ban management
│   │   ├── changelog/               # Version logging
│   │   ├── config/                  # User configs
│   │   ├── key/                     # License keys
│   │   ├── product/                 # Product management
│   │   ├── session/                 # Session tracking
│   │   └── user/                    # User management
│   ├── network/                     # HTTP server & API
│   │   ├── Server.java              # Main HTTP server
│   │   ├── RequestHandler.java      # Base request handler
│   │   ├── AdminRequestHandler.java # Admin operations
│   │   ├── requests/                # Public API endpoints
│   │   └── server/                  # HTTP utilities
│   └── utils/                       # Helper utilities
│       ├── BCrypthHash.java         # Password security
│       ├── BiHashMap.java           # Bidirectional maps
│       ├── JSON.java                # JSON handling
│       ├── Logger.java              # Logging system
│       └── Result.java              # Error handling
└── META-INF/
    └── MANIFEST.MF

Development



Key Design Patterns



Security Features



Use Cases


This system is designed for:


Testing


Unlike other projects in my portfolio, this system includes a comprehensive test suite due to its production deployment. Tests are located in the tests/ directory and cover critical system functionality to ensure reliability in real-world usage.

The testing approach focuses on:

These tests have been essential in maintaining system stability while adding new features incrementally during active production use.


License


This project is a personal/educational project.


Author


Lukas