无法从在HttpSession中设置的Portlet会话检索属性

无法从在HttpSession中设置的Portlet会话检索属性,session,servlets,portlet,websphere-portal,Session,Servlets,Portlet,Websphere Portal,我正在尝试实现一些验证码函数,“/UP2/servlet/captch”指向一个servlet,它将生成一个随机验证码并将其存储在HttpSession中,我希望稍后在WebSpherePortal自定义portlet中检索该验证码 这是我的验证码图像: <img src="/UP2/servlet/captch" id="captch"/> 当我提交portlet时,我想从会话中检索“键”,我使用下面的代码来检索:(这里的request是PortletRequest(Action

我正在尝试实现一些验证码函数,“
/UP2/servlet/captch
”指向一个servlet,它将生成一个随机验证码并将其存储在
HttpSession
中,我希望稍后在WebSpherePortal自定义portlet中检索该验证码

这是我的验证码图像:

<img src="/UP2/servlet/captch" id="captch"/>
当我提交portlet时,我想从会话中检索“键”,我使用下面的代码来检索:(这里的
request
PortletRequest
ActionRequest

但我总是得到
null
这也不起作用:

Object jCaptchainput = request.getPortletSession().getAttribute("key", PortletSession.APPLICATION_SCOPE);

有人能帮我吗?确实想知道如何在WebSpherePortal中的
Servlet
Portlet
之间进行通信。提前感谢。

这是针对经过身份验证的用户还是未经身份验证的用户?如果未经身份验证,是否启用了匿名会话?我相信您可能会遇到以下问题,您也可以通过导航器服务将其全局设置为public.session设置为true

在这种情况下,将创建一个临时会话,您的会话信息将在下一个请求中丢失。如果需要为未经身份验证的用户启用跨请求的会话跟踪,可以通过在portal Navigator服务配置中设置public.session参数或在JSR 286 portlet部署描述符中设置com.ibm.portal.public.session容器运行时选项来实现。请注意,这可能会导致内存消耗显著增加。有关com.ibm.portal.public.session选项和代码示例的详细信息,请参阅关于部署描述符的主题,关于容器运行时选项的部分。与使用这些选项不同的是,需要维护交互状态(即使对于未经身份验证的用户也是如此)的portlet应该使用呈现参数来保存这些信息,而不是按照javaportlet规范的建议保存portlet会话

Object jCaptchainput = PortletUtils.getHttpServletRequest(request).getSession().getAttribute("key");
Object jCaptchainput = request.getPortletSession().getAttribute("key", PortletSession.APPLICATION_SCOPE);