code

tomcat 서블릿에서 jsessionid를 비활성화 할 수 있습니까?

codestyles 2020. 11. 10. 08:08
반응형

tomcat 서블릿에서 jsessionid를 비활성화 할 수 있습니까?


Tomcat의 URL에서 jsessionid를 끌 수 있습니까? jsessionid는 검색 엔진 친화적이지 않은 것 같습니다.


이 필터를 사용하여 검색 엔진 만 비활성화 할 수 있지만 검색 엔진이 비우호적 인 것보다 더 나쁘기 때문에 모든 응답에 대해 사용하는 것이 좋습니다. 특정 보안 공격에 사용할 수있는 세션 ID를 노출합니다 ( 추가 정보 ).

Tomcat 6 (6.0.30 이전)

tuckey rewrite 필터를 사용할 수 있습니다 .

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

에서 톰캣 7 이후 당신은 세션 설정에 다음을 추가 할 수 있습니다.

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

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

Tomcat 7 및 Tomcat 8은 URL 기반 세션을 비활성화하는 web-app web.xml에서 위의 구성을 지원합니다.


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 사양을 따릅니다.


를 사용 Filter를 래핑 모든 URL에 responseA의 HttpServletResponseWrapper단지에서 변경되지 않은 URL을 반환 encodeRedirectUrl, encodeRedirectURL, encodeUrlencodeURL.


Pool의 답변에서 인용 :

tuckey rewrite 필터를 사용할 수 있습니다.

이 필터를 사용하여 검색 엔진 만 비활성화 할 수 있지만 검색 엔진이 비우호적 인 것보다 더 나쁘기 때문에 모든 응답에 대해 사용하는 것이 좋습니다. 특정 보안 공격에 사용할 수있는 세션 ID를 노출합니다 (추가 정보).

jsessionid가 더 이상 표시되지 않더라도 쿠키 기반 세션 처리를 허용한다는 점을 언급 할 가치가 있습니다. (그의 다른 게시물에서 발췌 : web.xml에서 HttpSession을 끌 수 있습니까? )

추신. 댓글을 달만한 평판이 충분하지 않다면 위의 게시물에 댓글로 추가했을 것입니다.


Tomcat 6.0에서는 Tomcat 설치의 / config 경로에서 context.xml로 disableURLRewriting = "true"를 사용할 수 있습니다.

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>

...

Now tomcat output it's search engine friendly...

Enjoy


Also if you have Apache in front of Tomcat you can strip out the jsession with a mod_rewrite filter.

Add the following to your apache config.

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

This will do a 301 redirect to a page without the jsessionid. Obviously this will completely disable url jsessionid's but this is what I needed.

Cheers, Mark


By default, cookies are enabled in Tomcat server(you can explicitly set it by using cookies=true in element of server.xml). Enabling cookies means that jsessionID will not be appended to URL's since session will be managed using cookies. However, even after cookies are enabled, jsessionID's are appended to the URL for first request as the webserver doesn't know at that stage if cookies have been enabled. To remove such jsessionIDs, you can using tuckey rewrite rules:

You can find more information on this at 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>

You can find more information on this at http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html

참고URL : https://stackoverflow.com/questions/962729/is-it-possible-to-disable-jsessionid-in-tomcat-servlet

반응형