java - 为什么 Tomcat 不能正确检索我的 session ?

标签 java session tomcat http-headers

我有两个 Java 应用程序在 Tomcat 上作为 servlet 运行。

应用程序 A 在另一个应用程序应用程序 B 上创建 session 。应用程序 A 然后使用 session cookie 登录应用程序 B。此 cookie 存储在 session 变量中并用于后续登录:

HttpSession session = request.getSession(false);
String cookieValue = session.getAttribute(sessionAttributeName);
HttpHeaders headers = new HttpHeaders();
headers.add("Cookie", cookieValue);
restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers), ProviderCostTOErrorWrapper.class);

这很好用。但是我需要能够使用休息客户端(我使用 PostMan)登录到应用程序 B。

所以我创建了一个服务来获取存储在应用程序 A session 中的应用程序 B 的 session cookie。它看起来像这样:

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE; Path=/treatment/; HttpOnly

但是当我登录到应用程序 b 并检查 session 对象时,它有一个完全不同的 ID:

03A85C79914839E4F6D60B343B3535C4

它也有不同的创建时间。

知道我做错了什么吗?

最佳答案

两个值都用于两个不同的事物。

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE
SESSIONID=03A85C79914839E4F6D60B343B3535C4

JSessionIdSessionId 不一样。

您认为 sessionId 是唯一的 String,由 Servlet 容器为每个单独的 HttpSession 定义.

另一方面,JsessioId 是跟踪参数,可以通过 ServletcookieURL 中提供应用程序接口(interface)。这是在创建 session 时定义的。因此,当您调用 request.getSession()request.getSession(true) 时,将创建 session 并将 JSessionId 存储在 cookies 。

HttpSession#getId()返回为特定 HttpSession 定义的唯一 String

关于java - 为什么 Tomcat 不能正确检索我的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833721/

相关文章:

[WebMethod(EnableSession = true)] 时 ASP.NET Web 服务非常慢

php - 是否可以将数据传递给 Oracle 触发器?

apache - 如何在云tomcat服务器上部署java web应用程序

spring - 现有的 Spring 应用程序到 Cloud Foundry

java - Liferay 7 - 在 Authenticator 类中设置共享 session 属性

java - 如何解决应用在不同屏幕上的显示问题?

java - 我想为我的 Android 应用程序创建一个红色的 "night mode"

java - 下面的 Java 程序的输出是什么?为什么我会收到错误

java - 通过 Android HOME 按钮从 Activity B->A 返回不会恢复 Intent

session - 如何在退出时自动保存vim session 并在启动时自动重新加载,包括拆分窗口状态?