2010-07-15 55 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中使用它,但是通过测试它不能像这样工作