Est-il possible de désactiver jsessionid dans l'url de tomcat? le jsessionid ne semble pas trop convivial pour les moteurs de recherche.
Vous pouvez désactiver uniquement les moteurs de recherche à l'aide de ce filtre, mais je conseillerais de l'utiliser pour toutes les réponses car c'est pire que simplement un moteur de recherche hostile. Il expose l'ID de session qui peut être utilisé pour certains exploits de sécurité ( plus d'informations ).
Tomcat 6 (avant 6.0.30)
Vous pouvez utiliser le filtre de réécriture Tuckey .
Exemple de configuration pour le filtre Tuckey:
<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 et versions ultérieures)
Vous pouvez utiliser disableURLRewriting dans la configuration de contexte pour désactiver ce comportement.
Tomcat 7 et Tomcat 8
De à partir de Tomcat 7 vous pouvez ajouter ce qui suit dans la configuration de la session.
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Tomcat 7 et Tomcat 8 prennent en charge la configuration ci-dessus dans votre application web web.xml, qui désactive les sessions basées sur URL.
Il est possible de le faire dans Tomcat 6.0 avec: disableURLRewriting
http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html
par exemple.
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>
Dans Tomcat 7.0, cela est contrôlé avec les éléments suivants dans une application: ServletContext.setSessionTrackingModes ()
Tomcat 7.0 suit les spécifications de Servlet 3.0.
Utilisez un Filter
sur toutes les URL qui encapsule le response
dans un HttpServletResponseWrapper
qui renvoie simplement l'URL inchangée de encodeRedirectUrl
, encodeRedirectURL
, encodeUrl
et encodeURL
.
Citation de la réponse de Pool:
Vous pouvez utiliser le filtre de réécriture Tuckey.
Vous pouvez désactiver uniquement les moteurs de recherche à l'aide de ce filtre, mais je vous conseille de l'utiliser pour toutes les réponses, car il est pire que le simple moteur de recherche hostile. Il expose l'ID de session qui peut être utilisé pour certains exploits de sécurité (plus d'informations).
Il convient de mentionner que cela permettra toujours la gestion de session basée sur les cookies même si le jsessionid n'est plus visible. (extrait de son autre article: Puis-je désactiver la HttpSession dans web.xml? )
PS. Je n'ai pas assez de réputation pour commenter, sinon j'aurais ajouté ceci à son post ci-dessus en tant que commentaire.
Dans Tomcat 6.0, vous pouvez utiliser disableURLRewriting = "true" dans context.xml à partir du chemin/config de votre installation Tomcat.
http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html
fichier 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>
...
Maintenant, Tomcat est compatible avec les moteurs de recherche ...
Prendre plaisir
Par défaut, les cookies sont activés dans le serveur Tomcat (vous pouvez le définir explicitement en utilisant cookies = true dans l'élément de server.xml). L'activation des cookies signifie que jsessionID ne sera pas ajouté aux URL car la session sera gérée à l'aide de cookies. Cependant, même après l'activation des cookies, les jsessionID sont ajoutés à l'URL pour la première demande car le serveur Web ne sait pas à ce stade si les cookies ont été activés. Pour supprimer de tels jsessionID, vous pouvez utiliser les règles de réécriture de tuckey:
Vous pouvez trouver plus d'informations à ce sujet sur 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>
Vous pouvez trouver plus d'informations à ce sujet sur http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-Java.html
De plus, si vous avez Apache devant Tomcat, vous pouvez supprimer la session avec un filtre mod_rewrite.
Ajoutez ce qui suit à votre configuration Apache.
#Fix up Tomcat jsession appending rule issue
RewriteRule ^/(.*);jsessionid=(.*) /$1 [R=301,L]
Cela fera une redirection 301 vers une page sans le jsessionid. Évidemment, cela désactivera complètement l'url jsessionid, mais c'est ce dont j'avais besoin.
À la vôtre, Mark