Session 门户应用程序中的会话标识符

Session 门户应用程序中的会话标识符,session,portlet,portal,websphere-portal,jsr286,Session,Portlet,Portal,Websphere Portal,Jsr286,我正在构建几个Portlet以部署在WebSpherePortal服务器上,每个Portlet都部署在它自己的WAR中。现在,我需要跟踪用户登录门户时访问的每个Portlet。我试图使用以下方法从Portlet获取会话标识符: HttpServletRequest servletRequest = PortletUtils.getHttpServletRequest(request); String sessionId = servletRequest.getSession().getId();

我正在构建几个Portlet以部署在WebSpherePortal服务器上,每个Portlet都部署在它自己的WAR中。现在,我需要跟踪用户登录门户时访问的每个Portlet。我试图使用以下方法从Portlet获取会话标识符:

HttpServletRequest servletRequest = PortletUtils.getHttpServletRequest(request);
String sessionId = servletRequest.getSession().getId();
但是在我登录之后,我从我访问的每个Portlet/WAR中获得了不同的
sessionId
值。我想这是有道理的,因为每场战争都有一个会话范围


那么,如何获取门户会话(而不是Portlet会话)的标识符呢?我发现
JSESSIONID
cookie在每个HTTP请求中都是相同的,但我不确定这是通过Servlet还是Portlet API公开的。

未登录门户的用户没有这样的会话。通过启用公共会话,您可以让门户跟踪匿名用户的会话信息

在导航器服务下查找要更改的属性

此外,我认为这可能更容易在主题或portlet过滤器中实现。您应该仍然能够在这两个位置中的任何一个位置访问门户会话,但不需要在每个portlet中都包含代码

这里有一个用于创建全局portlet过滤器的链接

更新:像任何大型框架一样,有很多选择。我会把我能想到/找到的东西告诉你。你可能需要进行实验,看看你喜欢哪种方法

在整个会话中,用户的JSESSIONID cookie应该是相同的。如果会话过期,他们将获得一个新的JSESSIONID cookie。使用此功能,您将能够通过单个会话跟踪用户,但可能无法跨多个会话跟踪用户

您可以考虑使用PuxLeTebug对象的<代码> GETUsRePrimIPAL()<<代码>或<代码> GETReleTeUsServer()/<代码>。我已经有一段时间没用过这些方法了,所以你必须看看它们能提供什么信息

还有
request.getAttribute(PortletRequest.USER\u INFO)
。您必须在portlet.xml中进行一些配置,以使某些属性在返回的映射中可用。有一个例子。我们使用的是ibm primaryEmail,而不是像我当前项目中的示例那样的名字和姓氏


最后,您可以研究如何使用内置在门户中的PUMAAPI。它在编码方面会有点繁重,显然更具体于容器,但应该能够完成与用户相关的任何工作。

我想跟踪登录用户访问的Portlet。会话Id在这种情况下似乎也不起作用(每一场战争都会管理它自己的价值),我已经更新了我的答案,并提供了更多的想法来尝试。不过,您不需要启用公共会话。如果您不需要它,您真的不应该这样做,因为它会增加一些性能开销,在这里对您没有任何帮助。尝试将portlet请求转换为servlet请求,并查看会话id。要做到这一点,请使用com.ibm.wps.pe.pc.std.core.PortletUtils类,我想wp.pe.rt.api.jar尝试在PortalServer\app或PortalServer\base中找到这个jar目录