A professional, real-time API Rate Limiting dashboard and backend system. This project provides a robust solution for managing API traffic, preventing abuse, and monitoring system health via a sleek, interactive dashboard.
- 🔐 Multi-Layer Authentication: Secure authentication and validation with unique API Key generation for every user.
- ⚖️ Dynamic Rate Limiting: Manage rules in real-time without restarting the server.
- GLOBAL: Apply limits to all users for specific endpoints.
- USER: Set custom quotas for individual users.
- API_KEY: Precision control for specific developer keys.
- 📊 Live Monitoring Dashboard:
- Traffic Throughput: Real-time charts showing request volume.
- Live Audit Logs: Instant visibility into every allowed (200) and blocked (429) request.
- Stat Cards: High-level metrics for Total Requests, Blocked Events, and Active Rules.
- 🧪 Integrated API Tester: Built-in terminal to test your APIs and rate limits directly from the browser.
- 👥 RBAC (Role-Based Access Control): Admin-only control panel for managing global rules and system-wide logs.
- Java 17 with Spring Boot 3
- Spring Security (Custom Filter & Interceptors)
- Spring Data JPA (MySQL Persistence)
- Lombok (Boilerplate reduction)
- Next.js 14 (App Router)
- TypeScript
- Recharts (Visual Analytics)
- Lucide Icons
- Vanilla CSS (Custom Premium Glassmorphism UI)
The complete API documentation including request bodies, headers, and authentication flows can be found here:
🔗 Postman API Documentation (Public Link)
| Resource | Path | Method | Access |
|---|---|---|---|
| Auth | /auth/register |
POST |
Public |
| Auth | /auth/login |
POST |
Public |
| Rules | /rate-limit/create |
POST |
Admin |
| Stats | /analytics/summary |
GET |
Authenticated |
| Logs | /logs |
GET |
Authenticated |
- Interceptor Layer: Every request is checked for a valid
API-KEYheader. - Filter Layer: The
RateLimiterFilterintercepts requests to protected paths (e.g.,/api/**). - Hierarchy Check: The system looks for rules in the order: API_KEY > USER > GLOBAL.
- Sliding Window: It queries the request history within the defined
timeWindow(e.g., 60 seconds). - Decision:
- If
count < limit, the request proceeds and is logged as200. - If
count >= limit, the request is rejected with429 Too Many Requests.
- If
- JDK 17+
- Node.js 18+
- MySQL Server
cd backend
# Update application.properties with your MySQL credentials
./mvnw spring-boot:runcd frontend
npm install
npm run dev


