Ueberwacht Aufrufe aufgrund der Herkunft z.B. IPs, und/oder
Anmeldungen, z.B. ApiKeys, und authorisiert letztere.
Merkt sich hierfuer die Zeitstempel aller Schluessel und Adressen, wobei
letztere ueber ein Intervall auch wieder aufgeraeumt werden.
Zudem koennen optional eine Keystore- und eine Backup-Datei beruecksichtigt
werden. Beim Keystore handelt es sich um eine Properties-Datei mit Zeilen der
Form
[Schluessel = RateLimit
als CSV]
Aenderungen an der Keystore-Datei loesen zur Laufzeit im Refresh-Intervall
einen Abgleich gegen die Laufzeit-Werte aus.
Adressen, also z.B. IPs, als Schluessel lassen sowohl eine adress-basierte
Ueberwachung, als auch ein einfaches Blacklisting zu.
Die zwar optionale, aber empfohlene Backup-Datei speichert den aktuellen
Live-Zustand, so dass ein Neustart hier wieder aufsetzen kann.
Wichtig:
Hier wird nicht authentifiziert, sondern nur gegen Schluessel authorisiert.
KeyStore (Datei) Beispiel:
admin$=1
66.6.6.6$=0
$myfunc=1,10
premiumUser$myfunc=10,1
basicAuthUser@1355030580=3,10
admin
hat vollen Zugriff.
Die IP
66.6.6.6
ist komplett geblockt.
myfunc
kann hier von
premiumUser
10 mal in der
Sekunde ausgefuehrt werden, von anderen Benutzern hingegen nur 1 Mal in 10 Sekunden.
Ein Schluessel kann sowohl eine IP, ein API-KEY, als auch ein BasicAuth
sein. Durch eine geschickte Vergabe, kann also auch eine IP (hier 66.6.6.6)
gesperrt werden.
Das Schluessel-Format fuer BasicAuth ist
user@password
,
wobei letzteres als
String.hashCode()
im KeyStore vorliegen muss.
Eine Sperrung bezieht sich jedoch immer nur auf einen Schluessel.
Existieren mehrere Schluessel aufgrund unterschiedlicher Endpunkte,
so muessen diese ebenfalls explizit gesperrt, bzw. auskommentiert werden.