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

时间:2017-01-04 10:06:29

标签: session servlets portlet websphere-portal

我正在尝试实现一些验证码功能," /UP2/servlet/captch"指向一个servlet,它将生成一个随机验证码并将其存储在HttpSession中,我想稍后在WebSphere Portal自定义portlet中检索它。

这是我的验证码图片:

<img src="/UP2/servlet/captch" id="captch"/>

这是用于生成验证码字符串并存储在HttpSession

中的servlet
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
                //...
                request.getSession().setAttribute("key", capstr);
                //...
    }

当我提交portlet时,我想检索&#34;键&#34;从会话中,我使用下面的代码来检索:( request这里是PortletRequestActionRequest))

Object jCaptchainput = PortletUtils.getHttpServletRequest(request).getSession().getAttribute("key");

但我总是null 这也行不通:

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

任何人都可以帮助我吗?真的想知道如何在WebSphere Portal中的ServletPortlet之间进行通信。提前谢谢。

1 个答案:

答案 0 :(得分:1)

是针对经过身份验证的用户还是未经身份验证的用户?如果未经过身份验证,您是否启用了匿名会话?我相信你可能会碰到下面的内容,你也可以通过导航器服务全局设置它,并将public.session设置为true http://www.ibm.com/support/knowledgecenter/SSYJ99_8.0.0/admin/srvcfgref_navigator.html

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