Immer ViewExpiredException in der Cluster-Umgebung und der Staat spart-Methode eingestellt ist, um client-und Benutzer-session gültig ist
Ich habe eine JSF-Anwendung, die verwendet Mojarra 2.2.9
und Bereitstellung auf WebSphere 8.5.5.4 auf gruppierten environement
und javax.faces.STATE_SAVING_METHOD
eingestellt ist client
.
Obwohl alle meine Bohnen sind request-scoped, manchmal, wenn die Benutzer-session gültig ist und der Benutzer tut-post-request auf eine Seite bekommt er ViewExpiredException
. Was kann dieses Problem verursachen und wie kann ich es lösen?
Wird die änderung der javax.faces.STATE_SAVING_METHOD
zu server
es lösen? Wenn ja, welche Auswirkungen hat dies auf die Erinnerung?
Auch, hat das etwas zu tun mit cluster-environement und vielleicht gibt es einige fehlende Konfiguration auf dem Websphere -, dass das Problem lösen wird?
- Ausschließen des offensichtlichen, Sie haben
<distributable />
imweb.xml
? - Nein, ich habe es nicht
- wenn ich konfigurierte session-Affinität in websphere, werde ich noch diesen tag in der web.xml meine Anwendung ?
- Ist es möglich, eine ViewExpiredException bei der Verwendung von client-Status zu speichern? Ich bin neugierig, weil ich immer dachte, es war unmöglich.
- standardmäßig auf einem einzelnen server, es ist unmöglich. Aber in einem cluster es kann geworfen werden, wenn die Ansicht wird in eine server-und deserialisiert in den anderen server, ohne dass die app konfiguriert als verteilbare und mit set
jsf/ClientSideSecretKey
(aber das verursacht hätte "MAC nicht überprüfen" Fehler, nicht ein VEE, also es ist irgendwie seltsam hier). Auf einem server kann es auch ausgelöst werden, wenncom.sun.faces.clientStateTimeout
eingestellt ist, aber dies ist unwahrscheinlich, dass der Fall hier. - MahmoudS, vielleicht brauchen Sie nur festlegen
jsf/ClientSideSecretKey
? Ich würde nur Fragen, warum du eine ViewExpiredException anstelle von "FEHLER: der MAC nicht überprüfen". - wird Sie richtig sind, erhalte ich die Fehlermeldung 'mac nicht überprüfen" in der log-Datei aber nicht gedacht, dass das eine jsf Ausnahme, und die habe ich noch bekommen, sogar nach dem hinzufügen <Verteilbarkeit /> der Anwendung web.xml ist die einzige Lösung für diesen Fehler ist die änderung des aggregatzustands speichern die Methode server ? und warum es erscheinen in den ersten Platz
- Vielen Dank für die Informationen. Gut zu wissen 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies wird geschehen, wenn die client-side-state-verschlüsselt von einem server entschlüsselt und von anderen server und der Server nicht die gleiche AES-Schlüssel für diesen. Normalerweise sollten Sie auch gesehen haben, die Warnung unten im server-log:
Müssen Sie sicherstellen, dass Sie eingestellt haben
jsf/ClientSideStateKey
imweb.xml
mit einem festen AES-Schlüssel, da sonst jeder server (re -) generieren Sie Ihre eigenen AES-key beim Start/Neustart (das verwendet wird, während die Verschlüsselung view state).Können Sie dieses snippet generiert eine zufällige AES256 (32bit) key im Base64-format.
Falls Sie Java Security: Illegal key size oder Standard-Parameter? Fehler, installieren Sie das cryptography extension gemäß den Anweisungen in den link, oder sonst generiert einen zufälligen AES-128-Algorithmus (16bit) - Taste anstelle.
Nachdem Sie die-Taste, stellen Sie unbedingt sicher, dass Sie nicht veröffentlichen/opensource-Ihr Schlüssel.
Weiter, die Sie auch brauchen, um sicherzustellen, dass Sie Hinzugefügt haben
<distributable />
tag zuweb.xml
so JSF führen aggressiveren Sitzung beschmutzt wird und die HTTP-Sitzungen (einschließlich der view-scoped beans sich selbst!) richtig synchronisieren, Server.Eine weitere mögliche Ursache von
ViewExpiredException
mit client-side-state-saving ist, dass Sie festgelegt haben, der Mojarra-spezifischen Kontext paramcom.sun.faces.clientStateTimeout
imweb.xml
repräsentiert die Zeit in Sekunden, bevor eine eingehende client-Seite-Zustand ist erloschen. Dies ist jedoch unwahrscheinlich, dass der Fall hier, wie das context-param hat eine ziemlich selbsterklärende Namen, die Sie entdeckt haben, indem Sie nur mit einem Blick überweb.xml
.Siehe auch:
java.security.InvalidKeyException: Illegal key size
auch nach ich diese Seite zu erzeugen, 128-bit-AES asecuritysite.com/encryption/keygen256
durch128
.org.apache.commons.codec.binary.Base64
mit den folgenden code und es funktioniert gut:KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(128); byte[] encodedBytes = Base64.encodeBase64(keyGen.generateKey().getEncoded()); String key = new String(encodedBytes);
Müssen Sie die verteilbare tag in Ihrem web.xml wie bereits erwähnt, durch balusc