我有两个 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
JSessionId
和 SessionId
不一样。
您认为 sessionId
是唯一的 String
,由 Servlet
容器为每个单独的 HttpSession
定义.
另一方面,JsessioId
是跟踪参数,可以通过 Servlet
在 cookie
或 URL
中提供应用程序接口(interface)。这是在创建 session 时定义的。因此,当您调用 request.getSession()
或 request.getSession(true)
时,将创建 session 并将 JSessionId
存储在 cookies 。
HttpSession#getId()
返回为特定 HttpSession
定义的唯一 String
。
关于java - 为什么 Tomcat 不能正确检索我的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833721/