Seit meiner Aktualisierung auf Tomcat 7 gibt es bei meiner Webapp ein Problem. Meine Sitzung wird null
, nachdem ich mich angemeldet habe und versucht habe, irgendetwas zu tun (eine Anfrage zu senden). Ich habe gelesen, dass folgende Einstellung hilfreich sein kann:
org.Apache.Tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
Weiß jemand, wo man das einstellen soll? Soll dies in web.xml
, context.xml
oder an anderer Stelle eingestellt werden?
Die andere Sache, die ich überprüfen möchte, ist folgende:
org.Apache.catalina.STRICT_SERVLET_COMPLIANCE
Sie können alle Systemeigenschaften in festlegen
Apache-Tomcat-7.0.33\conf\catalina.properties
datei. Das Hinzufügen Ihres Eintrags in dieser Datei sollte Ihr Problem beheben.
Z.B.
environment=local
Sie können die Systemmerkmale in Tomcat festlegen, indem Sie eine setenv.sh
-Datei im Verzeichnis/bin .. anlegen.
export Java_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value"
Merken:
Zwischen export Java_OPTS
und =
ist kein Leerzeichen. Auch: das Symbol &
ist anders, verwenden Sie .
.
Führen Sie nun Ihren catalina.sh
aus, um Tomcat zu starten.
Sie können diese Systemeigenschaften in der Befehlszeile festlegen, mit der Tomcat gestartet wird. Beispielsweise können Sie die Datei setenv.bat
(auf setenv.sh
, wenn Sie mit Linux arbeiten) im Tomcat-bin
-Ordner mit folgendem Inhalt haben:
set "CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding=UTF8 -Dorg.Apache.catalina.STRICT_SERVLET_COMPLIANCE=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m"
Diese Datei ist eine bevorzugte Methode zum Festlegen von Eigenschaften für Tomcat.
Jetzt ist FWD_SLASH_IS_SEPARATOR
standardmäßig auf false
eingestellt. Wenn Sie STRICT_SERVLET_COMPLIANCE
auf true
setzen, wird der Wert von FWD_SLASH_IS_SEPARATOR
ebenfalls auf true
(und auf einige andere Eigenschaften) gesetzt. Sie können es jedoch explizit auf false
setzen, z. In Ihrer setenv
-Datei können Sie Folgendes verwenden:
-Dorg.Apache.catalina.STRICT_SERVLET_COMPLIANCE=true
-Dorg.Apache.Tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
Dies ist auch, was ich vorschlage, wenn jemand STRICT_SERVLET_COMPLIANCE
auf true
setzt, um den FWD_SLASH_IS_SEPARATOR
immer zu deaktivieren. Andernfalls wird der Cookie-Pfadwert in Anführungszeichen gesendet (z. B. "\"
), und alle Browser, mit Ausnahme von Opera, erkennen dies heute nicht und würden z. kann die Sitzung nicht verfolgen.
DIE LÖSUNG:
sessionCookiePathUsesTrailingSlash="false"
Wir haben tatsächlich herausgefunden, wie wir das lösen können. Es war eine Tomcat 7-Einstellung, die wir einstellen mussten. Wir haben es in server.xml
unter dem Tag wie folgt platziert:
<Context path="/test" reloadable="true" docBase="c:\webapp\test"
workDir="c:\webapp\test" sessionCookiePathUsesTrailingSlash="false"/>
Beim Debuggen des Problems und beim Betrachten des Cookies-Pfads stellten wir fest, dass hinter dem Namen der webapp ein \
-Backslash eingefügt wurde. In unserer Test-Webapp wurde der Pfad auf /test/
anstelle von /test
festgelegt. Dies führte zu einer Reihe von Problemen.
Hat sich in Tomcat 7 noch jemand mit dieser Einstellung befassen müssen? Oder ein ähnliches Problem haben?
Wenn Sie versuchen, Variablen für einen Server festzulegen, der in Eclipse ausgeführt wird: