Можно ли отключить jsessionid в сервлете Tomcat? - PullRequest
67 голосов
/ 08 июня 2009

Возможно ли отключить jsessionid в URL в tomcat? Jsessionid, кажется, не слишком дружелюбен для поисковых систем.

Ответы [ 8 ]

67 голосов
/ 08 июня 2009

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

Tomcat 6 (до 6.0.30)

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

Пример конфигурации для фильтра 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 и далее вы можете добавить следующее в конфигурации сеанса.

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
50 голосов
/ 20 мая 2011
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

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

19 голосов
/ 11 апреля 2011

Это можно сделать в 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.

13 голосов
/ 08 июня 2009

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

5 голосов
/ 14 апреля 2010

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

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

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

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

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

4 голосов
/ 25 февраля 2012

В 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 удобен для поисковых систем ...

Наслаждайтесь

2 голосов
/ 12 марта 2011

По умолчанию куки включены на сервере Tomcat (вы можете явно установить его, используя cookie = true в элементе server.xml). Включение файлов cookie означает, что jsessionID не будет добавляться к URL-адресам, поскольку сеанс будет управляться с помощью файлов 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

2 голосов
/ 21 декабря 2010

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

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

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

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

Ура, Mark

...