Ist es möglich, jsessionid in der URL in Tomcat auszuschalten? Die jsessionid scheint nicht zu suchmaschinenfreundlich zu sein.
Antworten:
Sie können diesen Filter nur für Suchmaschinen deaktivieren, aber ich würde empfehlen , ihn für alle Antworten zu verwenden, da er schlimmer ist als nur Suchmaschinen unfreundlich. Es zeigt die Sitzungs-ID an, die für bestimmte Sicherheits-Exploits verwendet werden kann ( weitere Informationen ).
Tomcat 6 (vor 6.0.30)
Sie können den Tuckey-Rewrite-Filter verwenden .
Beispielkonfiguration für Tuckey-Filter:
<outbound-rule encodefirst="true">
<name>Strip URL Session ID's</name>
<from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
<to>$1$2$3</to>
</outbound-rule>
Tomcat 6 (6.0.30 und höher)
Sie können disableURLRewriting in der Kontextkonfiguration verwenden, um dieses Verhalten zu deaktivieren.
Tomcat 7 und Tomcat 8
Ab Tomcat 7 können Sie in der Sitzungskonfiguration Folgendes hinzufügen.
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Tomcat 7 und Tomcat 8 unterstützen die obige Konfiguration in Ihrer Web-App web.xml, wodurch URL-basierte Sitzungen deaktiviert werden.
In Tomcat 6.0 ist dies möglich mit: disableURLRewriting
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
z.B
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>
In Tomcat 7.0 wird dies in einer Anwendung wie folgt gesteuert: ServletContext.setSessionTrackingModes ()
Tomcat 7.0 folgt den Servlet 3.0-Spezifikationen.
Verwenden Sie ein Filter
für alle URLs , die die Packungen response
in einem , HttpServletResponseWrapper
die einfach die URL aus unverändert zurückgibt encodeRedirectUrl
, encodeRedirectURL
, encodeUrl
und encodeURL
.
Zitat aus Pools Antwort:
Sie können den Tuckey-Rewrite-Filter verwenden.
Sie können diesen Filter nur für Suchmaschinen deaktivieren, aber ich würde empfehlen, ihn für alle Antworten zu verwenden, da er schlimmer ist als nur Suchmaschinenunfreundlich. Es zeigt die Sitzungs-ID an, die für bestimmte Sicherheits-Exploits verwendet werden kann (weitere Informationen).
Es ist erwähnenswert, dass dies weiterhin die Behandlung von Sitzungen auf Cookie-Basis ermöglicht, obwohl die jsessionid nicht mehr sichtbar ist. (aus seinem anderen Beitrag: Kann ich die HttpSession in web.xml deaktivieren? )
PS. Ich habe nicht genug Ruf, um einen Kommentar abzugeben, sonst hätte ich ihn als Kommentar zu seinem obigen Beitrag hinzugefügt.
In Tomcat 6.0 können Sie disableURLRewriting = "true" in context.xml aus Ihrem / config-Pfad Ihrer Tomcat-Installation verwenden.
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
Datei context.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context disableURLRewriting="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
...
Jetzt Tomcat-Ausgabe ist es suchmaschinenfreundlich ...
Genießen
Auch wenn Sie Apache vor Tomcat haben, können Sie die jsession mit einem mod_rewrite-Filter entfernen.
Fügen Sie Ihrer Apache-Konfiguration Folgendes hinzu.
#Fix up tomcat jsession appending rule issue
RewriteRule ^/(.*);jsessionid=(.*) /$1 [R=301,L]
Dadurch wird eine 301-Umleitung zu einer Seite ohne die jsessionid durchgeführt. Natürlich wird dies die URL von jsessionid vollständig deaktivieren, aber das ist es, was ich brauchte.
Prost, Mark
Standardmäßig sind Cookies auf dem Tomcat-Server aktiviert (Sie können sie explizit festlegen, indem Sie cookies = true im Element server.xml verwenden). Das Aktivieren von Cookies bedeutet, dass jsessionID nicht an URLs angehängt wird, da die Sitzung mithilfe von Cookies verwaltet wird. Selbst nachdem Cookies aktiviert wurden, werden jsessionIDs für die erste Anforderung an die URL angehängt, da der Webserver zu diesem Zeitpunkt nicht weiß, ob Cookies aktiviert wurden. Um solche jsessionIDs zu entfernen, können Sie tuckey rewrite-Regeln verwenden:
Weitere Informationen hierzu finden Sie unter http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html
<outbound-rule encodefirst="true">
<note>Remove jsessionid from embedded urls - for urls WITH query parameters</note>
<from>^/(.*);jsessionid=.*[?](.*)$</from>
<to encode="false">/$1?$2</to>
</outbound-rule>
<outbound-rule encodefirst="true">
<note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note>
<from>^/(.*);jsessionid=.*[^?]$</from>
<to encode="false">/$1</to>
</outbound-rule>
Weitere Informationen hierzu finden Sie unter http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html