Frage

Nach dem Upgrade von JBoss 4 auf JBoss 5 ist mir die ärgerlichste Regression aufgefallen.Es schneidet das abschließende Gleichheitszeichen („=“) eines Base64-Cookie-Werts ab.

Es hat so lange gedauert, bis mir klar wurde, dass das Problem nicht an meinem Code lag, sondern an dem von JBoss. Ich habe danach gegoogelt und herausgefunden, dass es bekannt ist Ausgabe .

Die vorgeschlagene Lösung besteht darin, die Zeichenfolgenlänge zu berechnen und sie mit abschließenden Gleichheitszeichen aufzufüllen (bis zu einer Länge, die einem Vielfachen von 4 entspricht).

Da unsere Anwendung auf mehreren Anwendungsservern (z. B.(WebLogic, WebSpehere) Ich zögere sehr, diesen für diese Version von JBoss spezifischen Code hinzuzufügen.

Ist das jemandem begegnet?Können Sie eine intelligentere Problemumgehung vorschlagen?

bearbeiten: Dank @skaffman habe ich mein Problem verstanden, ich hätte base64 gar nicht erst für den Cookie-String verwenden sollen.Es gibt eine Variante auf Basis 64 namens base64-URL das sollte für solche Zeichenfolgen (Cookies, URLs...) verwendet werden.Der Bibliotheks-Apache-Codec unterstützt diese Variante beispielsweise in seiner Base-64-Implementierung.

War es hilfreich?

Lösung

Haben Sie Kontrolle darüber, wie Ihre Cookies erstellt und kodiert/dekodiert werden?Wenn ja, können Sie zu einem alternativen Codierungsmechanismus wechseln, der keine Zeichen verwendet, die möglicherweise mit der Cookie-Spezifikation kollidieren.Zum Beispiel, Apache Commons-Codec beinhaltet a Verhexen Klasse, die Binärdaten in und aus einer Hex-Zeichenfolge kodieren und dekodieren kann.Es wäre größer als die entsprechenden Daten in base64, aber das spielt möglicherweise keine Rolle.

Alternativ können Sie auch mit dem spielen Plätzchen API ein bisschen.Das Javadoc für Cookie.setValue() sagt:

Bei Version 0 Cookies sollten Werte keinen Weißraum, Klammern, Klammern, Klammern, enthalten, und Klammern, Klammern, Gleichheitszeichen, Kommas, doppelte Zitate, Schrägstriche, Fragezeichen, bei Schildern, Kolons und Semikolonen.Leere Werte verhalten sich auf allen Browsern möglicherweise nicht auf die gleiche Weise.

Technisch gesehen ist die Base64-Codierung also nicht mit Cookies der Version 0 kompatibel, was möglicherweise die Standardeinstellung ist.Du könntest versuchen, anzurufen setVersion(1) Überprüfen Sie das Cookie und prüfen Sie, ob dies einen Unterschied macht. Allerdings besteht dann das Risiko von Browserkompatibilitätsproblemen.

Andere Tipps

Wenn ich den Fehlerbericht richtig verstehe, würde eine korrekte Implementierung des Encoders immer eine Zeichenfolge erzeugen, die ein Vielfaches von 4 ist. Wenn Sie also die Fehlerbehebung hinzufügen, wird sie auf anderen App-Servern als JBoss nicht ausgelöst.Ihr Code funktioniert somit auf allen Servern.Nebenbei bemerkt könnten Sie es vielleicht als Servlet-Filter implementieren, was für Ihre App nur minimal aufdringlich ist.

Legen Sie für JBoss 5 die folgende Systemeigenschaft fest:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=false

--bala

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