2011-11-11 52 views
6

我在Liferay中編寫了自定義servlet,並且想知道哪個用戶頁面調用它並知道其他參數(如主題)。但請求的屬性和會話字段都是空值。如何獲取自定義servlet中的Liferay會話?

如何使自定義servlet接收請求,就好像portlet一樣?

謝謝

P.S.我不想使用這個解決方案https://www.everit.biz/web/guest/blog/-/blogs/getting-current-liferay-user-in-a-standalone-webapp?_33_redirect=/web/guest/blog

它手動讀取cookie。我想做像Liferay那樣的,即通過使用它的API。可能嗎?

更新1.

我在一個WAR中有一個portlet和一個servlet。我可以從Portlet JSP內知道我是誰(登錄用戶),如下所示:

HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); 

ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY); 

themeDisplay.getUser() 

現在我想從一個servlet執行相同的操作。可能嗎?

我正在使用自動部署的eclips。

+0

你是什麼意思「在Liferay」?您是否修改了Liferay的web.xml來加載您的servlet或您的servlet在Liferay旁邊運行? –

+0

你是如何直接部署到應用服務器或使用liferay的熱部署功能的? –

+0

請參閱上面的更新1(無法在此處添加代碼)。 – Dims

回答

3

您必須模仿Liferay在Portlet請求處理中的作用(不推薦),或者將您的servlet代碼放入portlet中 - 這可以是portlet的「資源處理」 - 您可以在其中完全訪問到http請求,並且可以自己處理關於在流中傳輸的數據類型的所有內容。

我寧願推薦這個,因爲升級會更容易。從邏輯角度來看,Portlet資源處理程序與servlet非常相似。可能還有其他(更可取的)選項,但這是我腦海中對這類問題的看法。

+1

恐怕我不能將代碼放入portlet,因爲它是作爲servlet(GWT服務)編寫的第三方服務。不管怎樣,謝謝你。 – Dims

+0

好的,我明白了。然後你必須去其他路線。有可能,我只是沒有可用的信息 - 希望其他人跳進來並指出相關信息。 –

+0

我想我只會將信息放入servlet會話中。這兩種請求類型都可以從Portlet的JSP中訪問,所以我將從PortletRequest中取出User並將其放入HttpServletRequest.session中......可能會找到2個會話相關的內容...... – Dims

相關問題