无法从在 HttpSession 中设置的 Portlet Session 检索属性
Unable to retrieve attributes from Portlet Session which set in HttpSession
我正在尝试实现一些验证码功能,“/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 时,我想从会话中检索 "key",我使用下面的代码来检索:(这里的 request
是 PortletRequest
(ActionRequest
))
Object jCaptchainput = PortletUtils.getHttpServletRequest(request).getSession().getAttribute("key");
但我总是得到 null
这也不起作用:
Object jCaptchainput = request.getPortletSession().getAttribute("key", PortletSession.APPLICATION_SCOPE);
谁能帮帮我?真的很想知道如何在 WebSphere Portal 中的 Servlet
和 Portlet
之间进行通信。提前致谢。
这是针对经过身份验证的用户还是未经身份验证的用户?如果未经身份验证,您是否启用了匿名会话?我相信你可能会 运行 进入下面,你也可以通过 Navigator 服务全局设置它 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 选项和代码示例的详细信息,请参阅有关部署描述符的主题,有关容器 运行 时间选项的部分。根据 Java Portlet 规范的建议,即使对于未经身份验证的用户也需要维护交互状态的 Portlet 不应使用这些选项,而是应使用呈现参数而不是 Portlet 会话来保留此信息。
我正在尝试实现一些验证码功能,“/UP2/servlet/captch
”指向一个 servlet,它将生成一个随机验证码并将其存储在 HttpSession
中,我想稍后检索它在 WebSphere Portal 自定义 portlet 中。
这是我的验证码图片:
<img src="/UP2/servlet/captch" id="captch"/>
这是生成验证码字符串并存储在HttpSession
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
//...
request.getSession().setAttribute("key", capstr);
//...
}
当我提交 portlet 时,我想从会话中检索 "key",我使用下面的代码来检索:(这里的 request
是 PortletRequest
(ActionRequest
))
Object jCaptchainput = PortletUtils.getHttpServletRequest(request).getSession().getAttribute("key");
但我总是得到 null
这也不起作用:
Object jCaptchainput = request.getPortletSession().getAttribute("key", PortletSession.APPLICATION_SCOPE);
谁能帮帮我?真的很想知道如何在 WebSphere Portal 中的 Servlet
和 Portlet
之间进行通信。提前致谢。
这是针对经过身份验证的用户还是未经身份验证的用户?如果未经身份验证,您是否启用了匿名会话?我相信你可能会 运行 进入下面,你也可以通过 Navigator 服务全局设置它 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 选项和代码示例的详细信息,请参阅有关部署描述符的主题,有关容器 运行 时间选项的部分。根据 Java Portlet 规范的建议,即使对于未经身份验证的用户也需要维护交互状态的 Portlet 不应使用这些选项,而是应使用呈现参数而不是 Portlet 会话来保留此信息。