Liferay Portal額外研究(三):IFrame Portlet的session丟失問題解決

Liferay額外研究(一):http://blog.csdn.net/james999/archive/2006/07/26/979938.aspx

Liferay額外研究(二):http://blog.csdn.net/james999/archive/2006/07/27/986386.aspx

Liferay額外研究(三):IFrame Portlet的session丟失問題解決

Liferay提供了一種非常的簡單web應用整合和單點登陸的方式:Iframe Portlet。利用Iframe Portlet可以很容易將一個已經存在的web應用納入,並且支持利用form的post或get方式,實現用戶的登陸。

對于Liferay這樣的機制沒有任何問題,實現的也非常巧妙;但是對于很多web應用系統來說,使用Liferay IFrame Portlet的form方式實現登陸後,雖然可以成功登陸,但是在顯示的新頁面中,卻發現用戶信息丟失,或者更准確的說,是session丟失。

其實,這種現象跟Liferay關系不大,而是應用本身決定的。事實上,所有的portal context的iframe 方式,都有可能發生這個情況。

因爲很多web應用系統,在執行Login操作的後,習慣性的選擇redirect操作,這樣會強制浏覽器中的顯示地址變更爲轉移的地址。事實上這是個很正確的做法,在正常境況下,不會有任何問題,而且還可以很好的防止頁面刷新等所帶來的問題。

但是在Liferay的IFrame Portlet中,web應用這樣的Redirect操作,造成了調轉到新頁面後,session變成了一個新的,從而造成放置在原有session中的login user信息丟失。

跟蹤並做了如下的一組測試(Liferay和webapp在不同的JVM環境下):

應用

位置

session id

(Liferay)

執行form post前

D03E1B828395EF5BCB1063A8290BD254

(APP_A)

Login操作

397BB3656E2A12A96CE3F16E0A89C607

(APP_A)

登陸後的新頁面

58A1054C6EDE4A7D6CFA2FCDBB3E0736

從上面可以明顯看出來,redirect之後,web應用的新頁面産生了新的sessionid

解決這個問題,有兩種方式,這兩種方式都依賴于被liferay portlet納入的web應用自身。

方式一:Login操作後,不采用Redirect方式,而是Dispatcher方式。

方式二:Login操作後,依然采用redirect方式,但將當前的jsessionid賦予新的頁面。

Dispatcher方式:

ServletContext sc = getServletContext();

RequestDispatcher rd = null;

rd = sc.getRequestDispatcher("/index.jsp");

rd.forward(request, response);

Redirect方式(保持同一個session):

response.sendRedirect(“

index.jsp;jsessionid=397BB3656E2A12A96CE3F16E0A89C607”)

有一種情況下,無所謂是否采用Redirect方式,這就是在Liferay和webapp在同一個JVM環境下。

在Liferay-EP(Liferay Enterprise Portal)上增加一個portlet(IFrame)
在Liferay-EP(Liferay Enterprise Portal)上增加一個portlet(IFrame)作者:【軟件環境介紹】:1,我使用的是liferay-ep-2.0.0-jboss-tomcat版(下面都簡稱爲《liferay-ep 2》),我將她安裝在D:\newPortalServer目...查看完整版>>在Liferay-EP(Liferay Enterprise Portal)上增加一個portlet(IFrame)
 
Portal開源實現-Liferay的Portlet Session處理(2)
二、LIFERAY中的實現LIFERAY在構建ActionRequestImpl和RenderRequestImpl時,會設置PORTLET SESSION,如下代碼所示:public RenderRequestImpl(HttpServletRequest req, Portlet portlet, CachePortlet cache...查看完整版>>Portal開源實現-Liferay的Portlet Session處理(2)
 
Portal開源實現-Liferay的Portlet Session處理(1)
一、規範中的SESSION描述(PortletSession objects must be scoped at the portlet application context level. Each portlet application has its own distinct PortletSession object per user session. The portl...查看完整版>>Portal開源實現-Liferay的Portlet Session處理(1)
 
Liferay Portal額外研究(6):Portlet附件上傳處理的點滴
作者:胡長城(銀狐999)時間:2006年9月5日晚 首先更正上一篇有關多分發Action處理的一些嚴重Bug。 更正一:在上篇中,我比較傾向于直接基于Struts DispatchAction擴展,這是錯誤的,應該盡量基于PortletAction,雖...查看完整版>>Liferay Portal額外研究(6):Portlet附件上傳處理的點滴
 
在Liferay Portal Professional裏實現一個使用SOAP的portlet
使用的主要工具有:liferay-tomcat-3.1.0 axis-1.1。下載得到這兩個工具的zip文件夾,分別解壓到兩個目錄裏,在環境變量裏把TOMCAT_HOME, AXIS_HOME分別指向這兩個文件夾根目錄。具體配置方法分別參考 實現功能:在...查看完整版>>在Liferay Portal Professional裏實現一個使用SOAP的portlet
 
在Liferay Portal Professional裏實現一個使用SOAP的portlet
使用的主要工具有:liferay-tomcat-3.1.0 axis-1.1。下載得到這兩個工具的zip文件夾,分別解壓到兩個目錄裏,在環境變量裏把TOMCAT_HOME, AXIS_HOME分別指向這兩個文件夾根目錄。具體配置方法分別參考LiferayAxis 實...查看完整版>>在Liferay Portal Professional裏實現一個使用SOAP的portlet
 
解決JAVA服務器性能問題研究分析
摘要 改善Java服務器的性能需要模擬負載下的服務器。創建一個模擬環境、搜集數據並且分析結果可能是對許多開發人員的挑戰。這篇文章中的示例介紹了JAVA服務器性能分析的概念和工具。作者使用這個示例來研究超額請...查看完整版>>解決JAVA服務器性能問題研究分析
 
解決JAVA服務器性能問題研究分析
   摘要   改善JAVA服務器的性能需要模擬負載下的服務器。創建一個模擬環境、搜集數據並且分析結果可能是對許多開發人員的挑戰。這篇文章中的示例介紹了JAVA服務器性能分析的概念和工具。作者使用這個示例來研究...查看完整版>>解決JAVA服務器性能問題研究分析
 
“棉改”五年 産業深層次的問題急需研究解決
爲期一天半的“棉花形勢與政策研討會”于5月 24日結束。來自主産棉區棉花協會、流通企業、棉農合作組織以及棉紡協會、政府相關部門的20余位代表就當前棉花形勢、未來棉花産業發展政策進行了熱烈的討論,提出了很多建...查看完整版>>“棉改”五年 産業深層次的問題急需研究解決
 
 
回到王朝網路首頁