我正在处理一些基于 Springs Portlet MVC 框架的 portlet。现在出现了一个问题:在这些 portlet 中,我需要一些 session 对象(用户信息等)——为了创建这个对象,我正在考虑使用过滤器。我现在的问题是:我是否必须在正常的 webapp 上下文 (web.xml
) 上声明我的过滤器,或者我是否需要将过滤器放在 portlet 级别? (在 portlet.xml
上放置 portlet 过滤器)
如果我没有完全错的话,所有 spring portlet 都在 spring 上下文中运行,它可以访问普通的 webapp 上下文,所以在我的 session 对象所在的位置将过滤器声明为 DelegatingFilterProxy
就足够了已创建。
我这个逻辑错了吗?
更新:
好吧——也许我想要一些不可能的东西:我只想在用户登录到门户(JBoss Portal
)时创建一个带有用户信息的 session bean。我尝试过过滤器/监听器来实现这一点,但我的方法中没有一种有效。通过将我的 JSR-168 portlet 移植到 Spring 支持的 portlet,我希望这是可以实现的。
我在我的 web.xml
中放置了一个过滤器,但这只会在用户注销时触发 - 而不是在登录时。
最佳答案
截至JSR 286 (门户 2.0):
The PortletSession interface defines two scopes for storing objects, APPLICATION_SCOPE and PORTLET_SCOPE.
还有一些其他选项可用于配置 session 处理(请参阅规范)。
总的来说,您的 portlet.xml 中的每个 portlet 都有自己的 session (portlet 范围)。它以 javax.portlet.p.<ID>?<ATTRIBUTE_NAME>
形式的键存储在 HTTP session (应用程序范围)中).如果您有同一个 portlet 的两个实例,每个实例都有自己的 session 。
因此,如何处理这取决于您希望 session 变量具有的范围。
关于java - Spring Portlet MVC 和 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253194/