2010-07-15 53 views
2

我正在研究一些Portlet,這些Portlet位於Springs Portlet MVC框架上。現在有一個問題出現:在這些portlet中,我需要一些會話對象(用戶信息等) - 創建這個對象時,我正在考慮使用過濾器。我的問題是現在:我是否必須在正常的Web應用程序上下文(web.xml)上聲明我的過濾器,還是需要將過濾器置於Portlet級別上? (放置Portlet過濾上portlet.xmlSpring Portlet MVC和會話對象

如果我不是完全錯誤的在訪問正常的Web應用程序上下文Spring上下文中運行的所有春天的portlet,所以它應該是夠不聲明過濾器DelegatingFilterProxy在我的會話對象被創建。

我對這個邏輯有誤嗎?

更新:

好吧 - 也許我想要的東西是不可能的:我只是想創建一個用戶信息如果一個用戶登錄到門戶(JBoss Portal)會話bean。我嘗試過濾器/偵聽器來實現這一點,但沒有一個我的方法可行。將我的JSR-168 portlet移植到Spring支持的portlet中,我希望這可以實現。

我在我的web.xml中放置了一個過濾器,但只有當用戶註銷時纔會觸發 - 而不是登錄。

回答

1

作爲JSR 286(Portlet的2.0):

PortletSession中接口定義了兩個範圍,用於存儲對象,APPLICATION_SCOPE和PORTLET_SCOPE。

還有一些配置會話處理的其他選項(請參閱規範)。

總的來說,portlet.xml中的每個portlet都有自己的會話(portlet範圍)。這存儲在HTTP會話(應用程序範圍)中,其格式爲javax.portlet.p.<ID>?<ATTRIBUTE_NAME>)。如果您有兩個相同portlet的實例,則每個實例都有自己的會話。

所以,你如何去做這取決於你希望你的會話變量的範圍。

0

因爲我之前曾經遇到過這個話題,並且基於我的測試,我發現在同一個portlet中使用的會話範圍實體以及在同一個WAR中的所有portlet中使用的globalsession範圍實體,但不是用於部署2個portlet在不同的WAR中,我希望在門戶容器的所有portlet中使用它,但是通過測試它不能像這樣工作