是否可以在tomcat的URL中关闭jsessionid?jsessionid似乎对搜索引擎不太友好。
Answers:
您可以使用此过滤器仅对搜索引擎禁用,但我建议对所有响应都使用它,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(更多信息)。
Tomcat 6(6.0.30之前的版本)
您可以使用tuckey重写过滤器。
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>
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Tomcat 7和Tomcat 8在您的Web应用程序web.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遵循Servlet 3.0规范。
使用Filter
上封装了所有URLresponse
中HttpServletResponseWrapper
,简单地将URL返回从不变encodeRedirectUrl
,encodeRedirectURL
,encodeUrl
和encodeURL
。
引用Pool的答案:
您可以使用tuckey重写过滤器。
您可以使用此过滤器仅对搜索引擎禁用,但我建议对所有响应都使用它,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(更多信息)。
值得一提的是,即使jsessionid不再可见,它仍将允许基于cookie的会话处理。(摘自他的另一篇文章:我可以关闭web.xml中的HttpSession吗?)
PS。我没有足够的名声可以发表评论,否则我会把它添加到上面的他的评论中。
在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>
...
现在tomcat输出它对搜索引擎友好...
请享用
默认情况下,在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上找到有关此信息的更多信息。