2015-09-29 97 views
0

我有兩個Java應用程序在Tomcat上作爲servlet運行。爲什麼Tomcat沒有正確檢索我的會話?

應用A創建上的另一個應用會話,應用程序B.應用程序A然後使用會話cookie登錄到應用程序B.該cookie被存儲在會話變量並在後續的登錄使用:

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的會話中的應用程序B的會話cookie。它看起來像這樣:

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE; Path=/treatment/; HttpOnly 

但是,當我登錄到應用程序B和檢查會話對象,它有一個完全不同的ID:

03A85C79914839E4F6D60B343B3535C4 

它也有一個不同的創建時間。

任何想法我做錯了什麼?

回答

1

這兩個值都有兩個不同的東西。

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE
SESSIONID=03A85C79914839E4F6D60B343B3535C4

JSessionIdSessionId都是不一樣的。

你認爲sessionId是一個獨特的String,由Servlet容器定義爲每個人HttpSession

另一方面,JsessioId是跟蹤參數,它可以在cookieURL之間由Servlet API提供。哪些是在創建會話時定義的。因此,當您撥打request.getSession()request.getSession(true)時,會話將被創建並且JSessionId將被存儲在cookie中。

HttpSession#getId()返回爲該特定HttpSession定義的唯一String

相關問題