Spring Portlet MVC和会话对象

时间:2010-07-15 07:03:23

标签: java spring portlet

我正在研究一些我在Springs Portlet MVC框架上的portlet。现在有一个问题出现了:在这些portlet中我需要一些会话对象(用户信息等) - 创建这个对象我正在考虑使用过滤器。我现在的问题是:我是否必须在正常的webapp上下文(web.xml)上声明我的过滤器,还是需要将过滤器放在portlet级别上? (将portlet过滤器置于portlet.xml

如果我没有完全错误,所有spring portlet都在Spring上下文中运行,它可以访问正常的webapp上下文,所以在我的会话对象被创建的地方声明一个过滤器就足够{.1}}。 / p>

我对这个逻辑错了吗?

更新

好的 - 也许我想要一些不可能的东西:我只想在用户登录门户网站(DelegatingFilterProxy)时创建一个包含用户信息的会话bean。我尝试过滤器/监听器来实现这一目标,但我的方法之一并不适用。通过将我的JSR-168 portlet移植到Spring支持的portlet,我希望这是可以实现的。

我在我的JBoss Portal中放置了一个过滤器,但只有在用户注销时才触发此操作,而不是在登录时触发。

2 个答案:

答案 0 :(得分:1)

截至JSR 286(Portlet 2.0):

  

PortletSession接口定义了两个用于存储对象的作用域,APPLICATION_SCOPE和PORTLET_SCOPE。

还有一些其他选项可用于配置会话处理(请参阅规范)。

总的来说,portlet.xml中的每个portlet都有自己的会话(portlet作用域)。它使用javax.portlet.p.<ID>?<ATTRIBUTE_NAME>形式的密钥存储在HTTP会话(应用程序范围)中。如果您有两个相同portlet的实例,则每个实例都有自己的会话。

所以,你如何做到这一点取决于你想要你的会话变量的范围。

答案 1 :(得分:0)

因为我之前面对这个主题,并且基于我的测试,我发现,在同一个portlet中使用的会话范围实体,以及在同一个WAR中的所有portlet中使用的globalsession范围实体,但不是在部署的2个portlet中使用不同的WAR,我希望在门户网站容器中的所有portlet中使用它,但通过测试它不能像这样工作