java - reloadable - ¿Es posible deshabilitar jsessionid en el servlet de tomcat?
tomcat web xml context (8)
Además, si tiene Apache frente a Tomcat, puede quitar la jsession con un filtro mod_rewrite.
Agregue lo siguiente a su configuración de Apache.
#Fix up tomcat jsession appending rule issue
RewriteRule ^/(.*);jsessionid=(.*) /$1 [R=301,L]
Esto hará una redirección 301 a una página sin la jsessionid. Obviamente, esto deshabilitará por completo url jsessionid, pero esto es lo que necesitaba.
Saludos, Mark
¿Es posible desactivar jsessionid en la url en tomcat? el jsessionid parece no ser demasiado amigable para los motores de búsqueda.
Cita de la respuesta de Pool:
Puede usar el filtro de reescritura de Tuckey.
Puede desactivar solo los motores de búsqueda que usan este filtro, pero le aconsejo que lo use para todas las respuestas, ya que es peor que solo el motor de búsqueda hostil. Expone el ID de sesión que se puede usar para ciertos exploits de seguridad (más información).
Vale la pena mencionar que esto aún permitirá el manejo de sesión basado en cookies aunque el jsessionid ya no esté visible. (tomado de su otra publicación: ¿Puedo desactivar HttpSession en web.xml? )
PD. No tengo suficiente reputación para comentar, de lo contrario, habría agregado esto a su publicación anterior como un comentario.
De forma predeterminada, las cookies están habilitadas en el servidor Tomcat (puede establecerlo explícitamente usando cookies = true en el elemento de server.xml). Habilitar cookies significa que jsessionID no se agregará a las URL, ya que la sesión se administrará mediante cookies. Sin embargo, incluso después de habilitar las cookies, las jsessionID se anexan a la URL para la primera solicitud, ya que el servidor web no sabe en ese momento si las cookies se han habilitado. Para eliminar tales jsessionIDs, puede usar las reglas de reescritura de tuckey:
Puede encontrar más información sobre esto en 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>
Puede encontrar más información sobre esto en http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html
En Tomcat 6.0 puede usar disableURLRewriting = "true" en context.xml desde su ruta / config de su instalación de tomcat.
archivo 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>
...
Ahora la salida de tomcat es amigable para los motores de búsqueda ...
Disfrutar
Es posible hacer esto en Tomcat 6.0 con: disableURLRewriting
p.ej
<?xml version=''1.0'' encoding=''utf-8''?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>
Dentro de Tomcat 7.0, esto se controla con lo siguiente dentro de una aplicación: ServletContext.setSessionTrackingModes ()
Tomcat 7.0 sigue las especificaciones de Servlet 3.0.
Puede desactivar solo los motores de búsqueda que usan este filtro, pero le aconsejo que lo use para todas las respuestas, ya que es peor que solo el motor de búsqueda hostil. Expone el ID de sesión que se puede usar para ciertos exploits de seguridad ( más información ).
Tomcat 6 (pre 6.0.30)
Puede usar el filtro de reescritura de Tuckey .
Ejemplo de configuración para el filtro 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 en adelante)
Puede usar disableURLRewriting en la configuración de contexto para deshabilitar este comportamiento.
Tomcat 7 y Tomcat 8
Desde Tomcat 7 en adelante , puede agregar lo siguiente en la configuración de la sesión.
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Utilice un Filter
en todas las URL que HttpServletResponseWrapper
la response
en un HttpServletResponseWrapper
que simplemente devuelve la URL sin cambios desde encodeRedirectUrl
, encodeRedirectURL
, encodeUrl
y encodeURL
.
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Tomcat 7 y Tomcat 8 admiten la configuración anterior en su web-app web.xml, que deshabilita las sesiones basadas en URL.