2013-04-17 196 views
5

我正在開發使用JSP & Servlets Web應用程序共享會話

我已經開發了一些Web應用程序像ProfileReportsLeads(容器:Oracle10Tomcat7,數據庫)。然後我開發了A Login應用程序。在此應用程序中,我將USERID存儲在Session中,並具有更多會話屬性。

用戶登錄後,他將顯示菜單,其中包含指向其他應用程序的鏈接,如指向Profile應用程序的鏈接。

所以,當我的用戶登錄後訪問Session在:

  • 如果我嘗試訪問會話withing相同的應用程序(登錄)然後我得到會話使用所有必需的屬性
  • 但是,當我嘗試從其他應用程序訪問會話像 Profiles然後我得到會話null

代碼片段來檢查會話(在登錄Web應用程序Servlet過濾器)

HttpSession session = request.getSession(false); 
if(session==null) 
{ 
    System.out.println("Session does not exist... Redirected to LOGIN Page."); 
    response.sendRedirect("/ApplicationName/Login.jsp"); 
} 

我訪問的Profile應用程序會話,以檢查用戶是否登錄或沒有。

然後我就搜查,我發現Session不能從其他應用程序訪問出於安全考慮。(我還發現,它可以通過設置crossContext="true"完成)

然後我發現了其他選項,如製作EAR的所有應用程序,然後部署它,但不幸EAR它不支持Tomcat7

我對網絡環境很陌生,所以如果任何人有過這方面的工作,那麼請讓我知道可以選擇什麼?

在此先感謝

UPDATE1

現在我已經決定使用EAR,其中我將包所有WAR文件,然後我會盡量在它們之間共享會話。因爲Tomcat不支持EAR我已經安裝了Oracle Glassfish,然後我創建了Enterprise Application Project,其中包含兩個應用程序1. Login2. Profiles,然後創建EAR文件,並將其部署到Glassfish。 所以我想分享這兩個應用程序之間的會話(在Glassfish上),所以如果任何人有任何想法,那麼請讓我知道。 (鏈接到任何教程也將不勝感激)

+0

表示您想要在運行於同一Web服務器上的多個應用程序之間共享數據。這可以在Web服務器Catalina中進行一些操作。我不認爲會有另一種方法來做到這一點, –

+0

@Nikhil是的,我想分享在同一個Web服務器上運行的幾個應用程序之間的數據(tomcat7) – Bhushan

+0

http://stackoverflow.com/questions/9293350/domain- level-session-cookie-on-multiple-domains關鍵字:域級會話cookie –

回答

4

我看到這在我的商店完成的方式是填充登錄憑據到加密的cookie和安裝代理(Java過濾器,Web服務器MODS等,在需要用戶數據的應用程序)將解密cookie並將數據傳遞給下游應用程序。如果您想跨應用程序共享,請勿將登錄信息存儲在HTTP會話中。

+2

從技術上講,這是一件棘手的單身單身歌曲。 – gaborsch

+0

@GaborSch你能詳細說明你爲什麼認爲它的黑客?如果Web應用程序運行在不同的域上並且用戶身份完全不相關,那麼我會考慮加入完整的SSO解決方案。但是如果你的應用程序都在同一個域中,那麼我認爲這種方法沒有任何問題。 –

+0

我不會將任何用戶憑證存儲在會話cookie中,無論是否加密。這是一個潛在的安全漏洞;但如果你使用不對稱編碼進行加密,那可能沒問題。無論如何,恕我直言,這將涉及太多的組件。 – gaborsch

5

如上所述,您所要求的要求是單點登錄(SSO)。您可以實現最簡單的SSO如下:

  1. 認證成功後與加密的用戶名添加cookie(你不需要加密密碼)
  2. 如果您訪問任何應用程序的使用用戶名cookie和解密成功,這意味着用戶已通過身份驗證,並且不應顯示登錄頁面。

使用AES-256進行加密。

+0

謝謝你的回答(和+1) – Bhushan