[英]Changing the JSESSIONID cookie name to something else with Spring Boot Security
[英]Changing cookie JSESSIONID name
我需要在单个物理框中运行多个 tomcat 服务器。 从浏览器访问这些内容时,当用户在应用程序之间切换时,会导致用户注销之前访问的应用程序。 这是因为 JSESSIONID cookie 冲突。
一种可能的解决方案是在不同的上下文中运行每个应用程序。 不幸的是,我的应用程序无法在上下文路径设置中工作,因为没有任何资源可以通过前面附加的 request.getContextPath() 访问。
这让我更改 cookie JSESSIONID 的名称来解决冲突。 有没有办法做到这一点? 如果是,如何?
希望我能清楚地说明我的问题。
注意:我所有的应用程序都在同一台机器的不同端口上运行。
使用 Servlet API 3.0,一切都变得简单多了。
现在你可以在你的 web.xml 中配置它:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
就是这样!
以下内容在 Tomcat7 上的 context.xml 文件中对我有用:
<Context path="/yourApp" sessionCookieName="custom_session_id">
通过使用以下两个系统属性,可以轻松实现这一点。
任何值都可以传递给上述属性以更改默认值。
在这里可以找到一些示例脚本的完整详细信息。
Tomcat 7 将其从 org.apache.catalina.SESSION_COOKIE_NAME 移动到主 <Context> 配置上的一个属性。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration
我认为此时不可能 - 请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=42419
最后一个条目指出“这已在 5.5.x 中修复,并将包含在 5.5.28 之后” - 这是下一个版本 - 5.5.27 是当前版本。
不能 100% 确定这是否有效,但您可以使用jvmRoute
属性,该属性通常用于负载平衡/集群环境中,以便负载平衡器能够区分节点。 例子:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
这最终会生成一个类似于“ABCDEF123456.node1”的 JSESSIONID 值。
文档链接。
我在 /tomcat/conf/server.xml 的 Tomcat 中找到了它
服务器.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="instanceName">
5D33F755D8D75EF7C8E840.instanceName
final SessionCookieConfig sessionCookieConfig = servletContext.getSessionCookieConfig();
sessionCookieConfig.setSecure(true);
sessionCookieConfig.setHttpOnly(true);
// Set __Host- prefix
sessionCookieConfig.setName("__Host-JSESSIONID");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.