tomcat修改jsessionid在cookie中的名称
### Tomcat中修改JSessionID在Cookie中的名称 在Tomcat服务器中,默认情况下,用于传递会话标识(即JSessionID)的Cookie名称为“JSESSIONID”。有时,出于安全考虑或其他需求,我们可能需要自定义这个名称。本文将详细介绍如何在不同版本的Tomcat中更改JSessionID在Cookie中的名称。 #### 一、Tomcat 5.x 版本 在Tomcat 5.x 版本中,可以通过设置系统属性 `org.apache.catalina.SESSION_COOKIE_NAME` 来更改JSessionID在Cookie中的名称。具体操作步骤如下: 1. **Linux环境:** ```bash JAVA_OPTS="-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname" ``` 2. **Windows环境:** ```cmd set JAVA_OPTS=-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname ``` 这里的 `yousessionname` 是你希望使用的自定义Cookie名称。需要注意的是,在设置系统属性时,确保使用正确的Java启动参数格式。 #### 二、Tomcat 6.x 和 7.x 版本 从Tomcat 6.x 开始,配置JSessionID在Cookie中的名称变得更加灵活。可以通过在`server.xml` 文件中的 `<Context>` 标签内设置 `sessionCookieName` 属性来完成这一操作。 **示例配置:** ```xml <Context path="/docBase=webapp" reloadable="false" sessionCookieName="yoursessionname"> ... </Context> ``` 其中 `yoursessionname` 是自定义的Cookie名称。这种方法比通过系统属性设置更加直观且易于管理。 #### 三、源代码分析 为了更好地理解上述配置是如何工作的,接下来将对Tomcat 5.x 和 6.x/7.x 的源代码进行简单的分析。 ##### 1. Tomcat 5.x 源码解析 在Tomcat 5.x 中,`SESSION_COOKIE_NAME` 的定义如下: ```java public static final String SESSION_COOKIE_NAME = System.getProperty("org.apache.catalina.SESSION_COOKIE_NAME", "JSESSIONID"); ``` 这表明默认情况下,如果没有显式设置系统属性 `org.apache.catalina.SESSION_COOKIE_NAME`,那么`SESSION_COOKIE_NAME` 的值将为 “JSESSIONID”。 ##### 2. Tomcat 6.x/7.x 源码解析 在Tomcat 6.x 和 7.x 中,对于 `<Context>` 配置的 `sessionCookieName` 属性,源码如下所示: ```java private String sessionCookieName; public String getSessionCookieName() { return sessionCookieName; } public void setSessionCookieName(String sessionCookieName) { String oldSessionCookieName = this.sessionCookieName; this.sessionCookieName = sessionCookieName; support.firePropertyChange("sessionCookieName", oldSessionCookieName, sessionCookieName); } ``` 可以看出,`sessionCookieName` 的值可以直接通过 `<Context>` 标签中的 `sessionCookieName` 属性设置,并且可以通过 `getSessionCookieName()` 方法获取当前的Cookie名称。当设置了新的Cookie名称时,`setSessionCookieName()` 方法会触发属性更改事件。 #### 四、总结 通过上述介绍,我们可以看到在不同版本的Tomcat中,更改JSessionID在Cookie中的名称有不同的方法。在早期版本如Tomcat 5.x 中,主要通过系统属性进行设置;而在较新版本如Tomcat 6.x 和 7.x 中,则通过在 `<Context>` 配置中设置 `sessionCookieName` 属性来实现。这些方法各有优势,可以根据实际需求选择合适的方式进行配置。
在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数
linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘
win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“
2、tomcat6和tomcat7修改方法相同
在Context容器标签上增加sessionCookieName参数
<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>
3、为啥这样就好用呢?
tomcat5时增加参数对所有Context生效,影响甚大,所以到以后的版本就仅针对Context设置了
tomcat5源码如下
public final class Globals
/**
* The name of the cookie used to pass the session identifier back
* and forth with the client.
*/
public static final String SESSION_COOKIE_NAME =
- 粉丝: 18
- 资源: 110
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip