[英]Servlet Acting as Proxy: How to forward the session?
我不太確定我要實現的要求的可行性,但是這是如何進行的:
HTTPClient
實現的,而不是通過Request Dispatcher實現的。 我基本上是向遠程服務器發出新的HTTP請求。 HttpServletRequest
)具有與其相關聯的會話。 HTTPSession
的isNew()
屬性為false。 我試圖從根本上找到一種將會話轉發到遠程服務器的方法。
更精確地說: 是否可以簡單地從HttpServletRequest
獲取會話並將其放入新創建的HTTP請求的會話中(通過HTTPClient
)?
這取決於您的遠程WS如何維護會話。 例如,如果它使用cookie(Tomcat會在其他技術中做到這一點),則轉發傳入的標頭應該可以幫助您實現這一點(請確保您提到接受cookie,但我默認HTTPClient會這樣做)。 現在,如果它基於URL中的參數,那么您應該嘗試重現該行為。
如果兩個節點(代理節點和服務節點)是不屬於應用程序集群的單獨進程,則可能不是。
Servlet容器通常管理HttpSession。 如果將請求轉發到由另一個容器托管的另一個服務,則將具有另一個會話對象。
如果兩個節點是群集的一部分,那么通常可以通過多種機制(在內存復制,數據庫同步等中)在群集中的節點之間共享會話。
另一個選擇是將會話數據外部化為Redis,Memcached,Coherence等。某些應用程序服務器對此過程具有可插拔的支持。 我相信在這種情況下,應用程序服務器節點不一定必須是集群的成員才能共享會話數據。
當我問這個問題時,我缺乏會話處理的一些基礎知識。 經過一番研究和討論之后,我得到了:
JSESSIONID
變量處理。 JSESSIONID
(可以將其關閉)。 遠程服務器認為這是一個新會話的原因是因為請求沒有設置此JSESSIONID
。
代理執行以下操作以確保轉發會話:
JSESSIONID
。 JSESSIONID
。 JSESSIONID
和遠程服務器JSESSIONID
的映射。 基本上,代理會執行從客戶端的JSESSIONID
到遠程服務器的JSESSIONID
的映射。 這樣,會話將轉發到遠程服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.