Можно ли отключить jsessionid в сервлете tomcat?

Можно ли отключить jsessionid в url в tomcat? jsessionid кажется не слишком дружественным поисковым системам.

Ответ 1

Вы можете отключить только поисковые системы, используя этот фильтр, но я бы посоветовал использовать его для всех ответов, поскольку это хуже, чем просто недружественная поисковая система. Он предоставляет идентификатор сеанса, который может использоваться для определенных эксплойтов безопасности (подробнее).

Tomcat 6 (до 6.0.30)

Вы можете использовать tuckey rewrite filter.

Пример конфигурации для фильтра 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 и далее)

Вы можете использовать disableURLRewriting в конфигурации контекста, чтобы отключить это поведение.

Tomcat 7 и Tomcat 8

Из Tomcat 7 onwards вы можете добавить в конфигурацию сеанса следующее.

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

Ответ 2

 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat 7 и Tomcat 8 поддерживают вышеуказанную конфигурацию в веб-приложении web.xml, что отключает сеансы на основе URL.

Ответ 3

Это можно сделать в Tomcat 6.0 с: disableURLRewriting

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

например.

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

В Tomcat 7.0 это контролируется приложением в приложении: ServletContext.setSessionTrackingModes()

Tomcat 7.0 следует спецификациям Servlet 3.0.

Ответ 4

Используйте Filter для всех URL-адресов, которые обертывают response в HttpServletResponseWrapper, который просто возвращает URL-адрес без изменений из encodeRedirectUrl, encodeRedirectUrl, encodeUrl и encodeUrl.

Ответ 5

Цитата из ответа пула:

Вы можете использовать фильтр перезаписи tuckey.

Вы можете отключить только поиск с использованием этого фильтра, но я бы посоветуйте использовать его для всех ответов как это хуже, чем просто поисковая система недружелюбно. Он предоставляет идентификатор сеанса которые могут быть использованы для определенной безопасности (подробнее).

Стоит отметить, что это все равно позволит обрабатывать сеансы на основе файлов cookie, даже если jsessionid больше не отображается. (взято из его другого сообщения: Можно ли отключить HttpSession в web.xml?)

PS. У меня недостаточно репутации для комментариев, иначе я бы добавил это в свой пост выше в качестве комментария.

Ответ 6

В Tomcat 6.0 вы можете использовать disableURLRewriting = "true" в context.xml из вашего /config пути установки tomcat.

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

файл 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>

...

Теперь tomcat выводит его дружественную поисковую систему...

Enjoy

Ответ 7

Также, если у вас есть Apache перед Tomcat, вы можете отключить jsession с помощью фильтра mod_rewrite.

Добавьте в конфигурацию apache следующее.

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

Это сделает 301 перенаправление на страницу без jsessionid. Очевидно, это полностью отключит url jsessionid, но это то, что мне нужно.

Cheers, Марк

Ответ 8

По умолчанию файлы cookie включены на сервере Tomcat (вы можете явно установить его с помощью cookie = true в элементе server.xml). Включение файлов cookie означает, что jsessionID не будет добавлен к URL-адресу, поскольку сеанс будет управляться с помощью файлов cookie. Однако даже после того, как файлы cookie включены, jsessionID добавляется к URL-адресу для первого запроса, поскольку веб-сервер не знает на этом этапе, если куки были включены. Чтобы удалить такие идентификаторы jsessionID, вы можете использовать правила перезаписи tuckey:

Дополнительную информацию об этом можно найти на 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>

Дополнительную информацию об этом можно найти на http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html