2012-05-13 130 views
4

我有兩個應用程序 - 一個Java EE Web應用程序和一個Java SE小應用程序。我想通過JSESSIONID(由Web應用程序創建)來認證applet中的用戶。JSESSIONID存儲在哪裏? (JavaEE)

所以有一個問題 - 如何將此JSESSIONID與特定用戶關聯?

如何檢查(在Web服務器應用程序端)由這樣的JSESSIONID代表哪個用戶?在applet中,我將從cookie中讀取它,然後我想寫一個簡單的Servlet,它將接受這個JSESSIONID作爲POST消息。此後,我想在JSESSIONID不好的時候在響應中寫下任何內容,並且如果JSESSIONID是好的(即表示某人),則用戶信息不會寫入。

有誰知道如何做到這一點?

回答

10

JSESSIONID是您通常不應關心的底層機制。在服務器端,servlet容器透明地將JSESSIONID轉換爲servlet中可用的對象HttpSession。使用Cookie標題或URL重寫將會話標識透明地傳遞給服務器。

因此,如果您點擊鏈接或在網頁上發佈普通表格,瀏覽器會自動通過JSESSIONID cookie或將其附加到URL。

你的設計有重大缺陷:安全的servlet容器應該添加HttpOnly屬性JSESSIONID的cookie(參見:How do you configure HttpOnly cookies in tomcat/java webapps?)這是爲了防止JavaScript的讀取JSESSIONID餅乾出於安全原因 - 就像劫持用戶會話。你的applet甚至可能看不到那個cookie!

我對的瞭解不多,但我會建議您通過網絡瀏覽器以某種方式執行HTTP請求,以便自動處理安全標識(cookie)。

3

Java EE容器將爲您完成大部分工作。根據您使用的身份驗證方法以及容器行爲方式的細節,您可以採取幾種捷徑。現在我會忽略那些捷徑。我假設用戶以某種形式向web應用程序提供他們的信息 - 例如登錄。

當用戶登錄時,創建一個會話(如果一個會話已經存在)並添加他們的用戶名(和其他任何你喜歡的細節)作爲會話屬性。

當一個請求進入已經有一個會話,只是從會話中檢索用戶的詳細信息。該容器負責將請求中的會話標識映射到正確的會話對象,並將其提供給請求。

如果會話ID無效,容器將不會將會話對象關聯到請求。

最後要注意的是HttpOnly cookies。容器應該默認使用這些會話ID(以防止XSS攻擊)。要使applet可用於會話ID,您需要禁用會話cookie的HttpOnly保護。這意味着如果您的應用程序具有XSS漏洞,攻擊者將很容易竊取用戶會話cookie。