Java: Kann ich Clients in derselben Sitzung / Knoten hinter dem Lastausgleichen durch Anwendung umleiten?

StackOverflow https://stackoverflow.com//questions/24017653

  •  21-12-2019
  •  | 
  •  

Frage

Ich habe eine WebApp, bei der ein Benutzer über verschiedene Clients auf dieselbe Sitzung (Jsession) zugreifen kann (d. H. von einem PC-Browser und vom Smartphone-Browser) gleichzeitig.

Beispiel:

a) Person X wird über seinen PC auf das System zugreifen. Für das Trawening von Browsing http://example.com/testapp?workon=123 . Der Server erstellt ein neues JsoStoDID-Senden Sie es an den Client und speichert einen Wert - Say 'ABC' in seiner Sitzung.

b) Nun wird dieselbe Person X auf dieselbe URL von seinem Smartphone auf dieselbe URL zugreifen und den Wert 'ABC' von der Sitzung in nachfolgenden Anforderungen abrufen können.

Dies funktioniert nicht aus der Box, denn in b) wird der Kunde eine neue Sitzung und JsessionID ermittelt, die sich von der in a) angebotenen Sitzung unterscheidet.

Wenn ich den Server nun zwinge, denselben Jsozidid-B) wie in a) zu liefern, können sie beide auf dieselbe Sitzung zugreifen? Ist das möglich?

Ich frage das, weil ich Folgendes erreichen möchte:

Die Anwendung läuft hinter einem Lastausgleicher, der klebrige Sitzungen mit der Verwendung des JSessionID ermöglicht.

Ich möchte das erreichen, dass B in den nachfolgenden Anforderungen von B) an denselben Cluster-Knoten umgeleitet wird.

Der Anforderungsparameter "Workon" ist hier nur ein Beispiel. In Wirklichkeit handelt es sich um ein Token, das der Lastausgleicher nicht verstehen kann. Nur die Anwendung kann den Inhalt des Parameters "Workon" verstehen und decodieren.

Es ist kein Problem, dass die erste Anforderung von B) zu einem beliebigen Knoten geht. Jeder Knoten kann den Parameter "Workon" decodieren, dass jeder Angebot den richtigen JSessionID für den Client für den Client decodieren. Die nachfolgende Anforderung sollte jedoch an denselben Knoten als Anfragen von a) umgeleitet werden.

Ich möchte keine Sitzungsunterstützung über Knoten verwenden, wegen Leistungsfragen. Die Sitzungen-Daten sind ziemlich groß. Ich möchte b) auf denselben Knoten als a) basierend auf der ersten Anfrage von B) umleiten, b)

Alle Ideen?

Bearbeiten, um Fragen in Kommentaren zu reflektieren:

auf Anfrage a) Es gibt den Anforderungsparameter "Workon" Dies identifiziert einige Datensätze in der Karte. Dieser Datensatz enthält den Benutzer und die JSESSIONID für sicher bindend. Der Lastausgleicher kann also den Benutzer nicht für die Anforderung erfahren. Der Benutzer wird nicht mit einem Anmeldung authentifiziert.

auf Anfrage b) (vom Smartphone) Das Telefon sendet ein BenutzerDID und ein Token auf der ersten Anforderung (in der JSON / XML-Nutzlast). Die Apligkeit prüft, dass das Token für diesen Benutzer gültig ist (erneut mithilfe einer Karte), findet dann das neueste "Workon" für diesen Benutzer und sendet diesen "Workon" zurück zum Smartphone. Auf der nachfolgenden Anforderung (diese sollten auf denselben Knoten wie a) das Smartphone sendet das Token und den Parameter Workon.

War es hilfreich?

Lösung

Sie können die Jsession-ID-Token nicht direkt verwenden, wenn Sie möchten, dass die Knotenzuordnung über einen anderen Browser (einem PC und einem mobilen Mobiltelefon bleiben soll)

Sie benötigen dafür eine Authentifizierung - Nach der Authentifizierung setzen Sie einen Cookie auf dem Client, der für jeden Benutzer eindeutig ist. Verwenden Sie diesen Cookie nicht, um zu prüfen, ob der Benutzer authentifiziert ist: Sie wird Sie auf alle Arten von Sicherheitsfragen öffnen. Stellen Sie einfach sicher, dass nach Anmeldung ein Benutzer immer den gleichen Cookie-Wert gewährt

Verwenden Sie diesen Cookie, um die klebrige Sitzung in Ihrem Lastausgleicher zu implementieren. Spezifisch ändert sich entsprechend dem Balancer, aber die meisten von ihnen sollten Kekse verstehen.

Der spezifische Name und der Inhalt des Cookie variiert über Lastausgleiche. Hier ist ein Beispiel mit Apache-Server Apache Load Balancer: http://httpd.apache.org/docs/current/ mod / mod_proxy_balancer.html http://www.markround .com / Archiv / 33-Apache-mod_proxy-balancing-with-php-sticky-sessions.html /

Hier ein anderer mit Haproxy: Lastausgleich (Haproxy oder andere) - klebrige Sitzungen

Beachten Sie, dass Sie für HAPROXY die Option "Preserve" in der Konfiguration aktivieren sollen, sodass der Server den Cookie-Inhalt steuern und den gleichen Benutzer demselben Backend (nach der Authentifizierung) aufkleben kann (nach der Authentifizierung)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top