2012-02-08 15 views
1

我有一個Java EE應用程序通過http/s接收請求。請求不包含任何cookie或jsessionid請求參數。如何基於請求負載將請求與Java EE應用程序中的HttpSession關聯?

在請求負載中,我可以找到一個字符串「sessionid」,該字符串應該允許我將該請求關聯到HttpSession。我設法實現了一種將會話映射存儲在內存中的機制,但這在集羣環境中不是(容易)可伸縮的。

用於將請求與HttpSession關聯的標準Java EE機制基於cookie或URL重寫,這些不適用於我,因爲我不控制發送請求的第三方。另外,HttpServletRequest對象沒有setSession()方法。

是否有直接的方式將請求關聯到HttpSession,而不依賴於特定的Java EE服務器或某些分佈式緩存?

回答

5

幾條語句:

  • 第三方客戶端不符合HTTP規範,如果你需要一個定製的機制,你應該實現這一切,這不是你的問題
  • 。也就是說,不要依賴於HttpSession - 爲每個sessionId製作一個Map<String, Object>並支持它yourelf
  • 任何其他解決方案都需要將代碼插入容器(對於tomcat,可能是Valve),但沒有標準解決方案。
+0

我知道HttpServletRequest有一個getSession。它沒有setSession。 – 2012-02-08 15:11:38

+1

第一點直接擊中頭部。修復客戶端,或告訴責任人修復它。 – BalusC 2012-02-08 15:26:33

+0

@VictorIonescu對不起,我誤解了它。刪除了這一點。其他人依然存在。 – Bozho 2012-02-08 19:46:18

0

我一直在那條路上,這是一個死路一條。你真的需要選擇其他機制,而不是HttpSession 它可以像每個會話(應該存儲在數據庫而不是內存中)或更復雜的一個唯一的ID一樣簡單。 以下鏈接可以幫助你

但是,是的,改變機制確實表示第三方必須符合它。