Est-il possible de désactiver jsessionid dans tomcat servlet?

est-il possible de désactiver jsessionid dans l'url de tomcat? le jsessionid ne semble pas trop convivial moteur de recherche.

64
demandé sur Mark 2009-06-08 00:17:23

8 réponses

vous pouvez désactiver pour juste les moteurs de recherche en utilisant ce filtre, mais je conseillerais l'utiliser pour toutes les réponses que c'est pire que juste moteur de recherche inamical. Il expose L'ID de session qui peut être utilisé pour certains exploits de sécurité ( more info ).

Tomcat 6 (avant 6.0.30)

Vous pouvez utiliser le bouton tuckey réécrire filtre .

exemple de configuration pour le filtre de Tuckey:

<outbound-rule encodefirst="true">
  <name>Strip URL Session ID's</name>
  <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
  <to></to>
</outbound-rule>

Tomcat 6 (6.0.30 et suivants)

vous pouvez utiliser désactiver l'écriture dans la configuration de contexte pour désactiver ce comportement.

Tomcat 7 et Tomcat 8

à Partir de Tomcat 7, , vous pouvez ajouter le texte suivant dans la session config.

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
64
répondu Pool 2015-09-18 09:42:26
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat 7 et Tomcat 8 supportent la config ci-dessus dans votre Web-app web.xml, qui désactive les sessions basées sur des URL.

51
répondu Spektr 2015-09-18 09:44:01

il est possible de le faire dans Tomcat 6.0 avec: disablurmrewriting

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

p.ex.

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>

dans Tomcat 7.0, ceci est contrôlé avec ce qui suit dans une application: ServletContext.setSessionTrackingModes ()

Tomcat 7.0 suit les spécifications du Servlet 3.0.

19
répondu Doug 2011-04-11 16:58:27

utilisez un Filter sur toutes les URL qui enveloppent le response dans un HttpServletResponseWrapper qui retourne simplement L'URL inchangée de encodeRedirectUrl , encodeRedirectURL , encodeUrl et encodeURL .

13
répondu Andrew Duffy 2009-06-07 20:57:53

citation de la réponse de Pool:

vous pouvez utiliser le filtre tuckey rewrite.

, Vous pouvez le désactiver il suffit de chercher pour les moteurs à l'aide de ce filtre, mais j'avais conseiller de l'utiliser pour toutes les réponses que c'est pire que de simplement le moteur de recherche hostile. Il expose L'ID de session qui peut être utilisé pour certaines de sécurité exploits (plus d'info).

il est intéressant de mentionner, que cela permettra encore gestion de session basée sur les cookies même si le jsessionid n'est plus visible. (extrait de son autre billet: puis-je désactiver la session https sur le web.xml? )

PS. Je n'ai pas assez de réputation pour le commentaire, sinon je l'aurais ajouté ceci à son post ci-dessus comme un commentaire.

5
répondu Andreas 2017-05-23 12:02:51

dans Tomcat 6.0 vous pouvez utiliser disablurlrewriting=" true " dans le contexte.xml à partir de votre chemin / config de votre installation tomcat.

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

contexte.fichier 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 sortie il est moteur de recherche convivial...

Profiter

4
répondu myset 2012-02-25 17:25:36

aussi si vous avez Apache devant Tomcat, vous pouvez supprimer la jsession avec un filtre mod_rewrite.

ajouter ce qui suit à votre configuration apache.

#Fix up tomcat jsession appending rule issue
RewriteRule  ^/(.*);jsessionid=(.*) / [R=301,L]

ceci fera une redirection 301 vers une page sans le jsessionid. Évidemment, cela va désactiver complètement url jsessionid mais c'est ce dont j'avais besoin.

santé, Marque

2
répondu Mark Lynch 2010-12-21 04:30:06

par défaut, les cookies sont activés dans le serveur Tomcat(vous pouvez le configurer explicitement en utilisant cookies=true dans l'élément du serveur.XML.) Activer les cookies signifie que jsessionID ne sera pas ajouté aux URLs puisque la session sera gérée en utilisant des cookies. Cependant, même après que les cookies sont activés, les jsessionID sont ajoutés à L'URL pour la première requête car le serveur web ne sait pas à ce stade si les cookies ont été activés. Pour supprimer de tels jsessionIDs, vous pouvez utiliser les règles de réécriture de tuckey:

vous pouvez trouver plus d'informations à ce sujet à 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">/?</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">/</to>
</outbound-rule>

vous pouvez trouver plus d'informations à ce sujet à http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html

2
répondu techwiz 2011-03-12 15:24:30