Verfolgen eines Benutzers über Server ist schwierig für echte zustandslose Server-Seite. Die meiste Zeit sind die Dinge ein staatenloser Server, bei dem Logins die Ausnahme sind. Die große Sache mit zustandslosen Servern ist jedoch, dass das Clustering sehr einfach ist, sodass Sie horizontal skalieren können.
In Java können Sie es statuslos machen, indem Sie entweder Cookies verwenden, um Anmeldeinformationen zu speichern, oder verteilte Hashes verwenden. Im Allgemeinen akzeptieren Menschen die Verwendung von Memcache und sagen, dass sie statuslos sind, da der Status außerhalb des Webservers gespeichert wird. Dadurch kann der Benutzer jeden Webserver in der Farm verwenden und trotzdem sicher authentifiziert werden. In Java haben wir viele verteilte Hash-Implementierungen, die Sie mit Spring verwenden können, so dass Sie Memcache dafür nicht verwenden müssen.
Die andere Option besteht darin, Cookies zu verwenden, um ein kryptographisch sicheres Hash-Ticket namens HMAC zu speichern. Die Verwendung von Cookies verhindert die Verwendung der Sitzung, so dass der Webserver staatenlos ist. Mit HMAC können Sie einen Datenblock signieren, der nicht von Dritten gefälscht oder erstellt werden kann und garantiert von Ihnen stammt. Dies erfordert keine externen Serverressourcen (den Cache), um den Benutzer zu authentifizieren, damit er besser skaliert werden kann. Es gibt jedoch einige Sicherheitsbedenken, die Sie beachten müssen. FYI Google verwendet diese Technik, um horizontal zu skalieren. Ein HMAC ist nicht wie SHA1 oder andere Cyrpto-Hashes. Sie benötigen einen geheimen Schlüssel, der auf jedem Server in der Farm sein muss. Das muss auch mit einem symmetrischen Verschlüsselungsschlüssel geschützt werden, um sicherzustellen, dass er sicher auf dem Server gespeichert wird, sollte jemand die Datei erhalten. Auch HMACs Informationen werden im Klartext gespeichert, so dass Sie zwar den Benutzernamen oder die E-Mail in den Cookie einfügen können, aber der eigentliche Krypto Hash ist für jeden verfügbar. Wenn jemand diesen Keks erhalten würde, könnte er sich als dieser Benutzer ausgeben. Aus diesem Grund sind HMACs in der Regel nur für eine bestimmte Zeit gültig. Danach verfallen sie, so dass jemand, der sie erhält, nicht für immer auf dieses Konto zugreifen kann.
Also HMACs haben diese Schwäche und Sie sollten vorsichtig sein, in welchen Anwendungen Sie sie verwenden. Es wäre eine wirklich schlechte Idee für Paypal, dieses Schema zu verwenden, weil alles, was ich tun muss, ist Ihre sichere Cookie dann übertragen Sie alle Ihre Geld für mich. Der große Vorteil ist, dass Ihre App wirklich staatenlos ist.
Die letzte Option besteht darin, Ihre Java-Sitzungen in einem verteilten Hash zu speichern. PHP und andere Plattformen werden ihre Sitzungen in der Datenbank ablegen, den verarmten Cache verarmen oder in Memcache ablegen. Mit Java können Sie das Gleiche tun. Sie können Ihre Sitzungsobjekte auch in den verteilten Cache stellen. Diese Option ist in Ungnade gefallen, weil die Leute denken: "Cool, jetzt kann ich alles, was ich will, in meine Sitzung stecken und es wird staatenlos sein." Wie bei allen verteilten Caches sind jedoch die Übertragungsgeschwindigkeit, die Replikationszeit und die Nutzlastgröße begrenzt. Dies gilt für Java oder Memcache. Halten Sie Ihre Sitzungen klein, und das funktioniert gut. Wirf alles in die Sitzung und schon geht es wieder um Skalierungsprobleme mit einem einzelnen Server. Und tatsächlich ist es wahrscheinlich schlimmer, als wenn Sie Ihren Server gerade statusfähig gemacht hätten, weil Grid-Computing manchmal schlechter ist als ein einzelner Server.
Update: Hier finden Sie eine Liste von Java verteilt Caching Bibliotheken, die Sie dies tun können:
http://www.manageability.org/blog/stuff/distributed-cache-java
Ich würde vorschlagen, Fragen über Feder-Sicherheit-Konfiguration in einer separaten Frage, da die Antworten sehr unterschiedlich sein werden als diejenigen, die erklären, was zustandslose Server sind. –