是否有可能在tomcat的url中关闭jsessionid? jsessionid似乎对搜索引擎不太友好。
答案 0 :(得分:67)
您可以使用此过滤器禁用搜索引擎,但我建议将其用于所有回复,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(more info)。
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>
答案 1 :(得分:51)
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Tomcat 7和Tomcat 8支持您的web-app web.xml中的上述配置,该配置禁用基于URL的会话。
答案 2 :(得分:19)
可以在Tomcat 6.0中执行以下操作: disableURLRewriting
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
e.g。
<?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规范。
答案 3 :(得分:13)
对Filter
中包含response
的所有网址HttpServletResponseWrapper
使用encodeRedirectUrl
只会返回encodeRedirectURL
,encodeUrl
,{{1}不变的网址}和encodeURL
。
答案 4 :(得分:5)
引用Pool的回答:
您可以使用tuckey重写过滤器。
您可以禁用只搜索 使用这个过滤器的引擎,但我会 建议将其用于所有回复 它比搜索引擎更糟糕 不友好。它公开了会话ID 可用于某些安全性 利用(更多信息)。
值得一提的是,即使jsessionid不再可见,这仍将允许基于cookie的会话处理。 (取自他的另一篇文章:Can I turn off the HttpSession in web.xml?)
PS。我没有足够的声誉来发表评论,否则我会将其添加到上面的帖子中作为评论。
答案 5 :(得分:4)
在Tomcat 6.0中,你可以使用disableURLRewriting =“true”进入你tomcat安装的/ config路径的context.xml。
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输出它的搜索引擎友好...
享受
答案 6 :(得分:2)
此外,如果您在Tomcat前面安装了Apache,则可以使用mod_rewrite过滤器删除jsession。
将以下内容添加到您的apache配置中。
#Fix up tomcat jsession appending rule issue
RewriteRule ^/(.*);jsessionid=(.*) /$1 [R=301,L]
这将执行301重定向到没有jsessionid的页面。显然这会完全禁用url jsessionid,但这就是我需要的。
干杯, 标记
答案 7 :(得分:2)
默认情况下,Tomcat服务器中启用了cookie(您可以在server.xml的元素中使用cookies = true显式设置它)。启用cookie意味着jsessionID不会附加到URL,因为会话将使用cookie进行管理。 但是,即使启用了cookie,jsessionID也会附加到第一个请求的URL中,因为网络服务器在该阶段不知道是否已启用cookie。要删除这样的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
找到更多相关信息