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



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

692   8  

8 ответов:

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

Tomcat 6 (pre 6.0.30)

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

пример конфига для Tuckey фильтр:

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

Tomcat 6 (6.0.30 и далее)

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

Tomcat 7 и Tomcat 8

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

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

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

Это можно сделать в 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 соответствует спецификациям сервлета 3.0.

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

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

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

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

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

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

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

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

контексте.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 выводит его в поисковую систему...

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

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

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

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

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

Ура, Марк

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

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

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

Comments

    Ничего не найдено.