为了账号安全,请及时绑定邮箱和手机立即绑定

Liferay 7 共享会话属性

Liferay 7 共享会话属性

白衣非少年 2022-06-08 17:36:03
我正在尝试使用 Liferay 共享会话属性。我想在不同的 WAR 文件中的两个不同的 portlet 上使用相同的属性,使用基于以下代码的不同 URL:Liferay 7 无法设置全局会话属性我要保存的值:单个字符串在 portlet 1 中设置:String sharedKey = "LIFERAY_SHARED_" + key;HttpSession session = PortalSessionThreadLocal.getHttpSession();session.setAttribute(sharedKey, bean);Portlet 1 能够很好地保留、重置和使用属性。在 portlet 2 中读取:key = "LIFERAY_SHARED_" + key;HttpSession session = PortalSessionThreadLocal.getHttpSession();Object bean = session.getAttribute(key);此值始终为空。两个 portlet 都是 Spring MVC portlet。两个 portlet 都有:<instanceable>false</instanceable><private-session-attributes>false</private-session-attributes><requires-namespaced-parameters>false</requires-namespaced-parameters>在他们的 liferay portlet XML-s 中。此外,这两个 portlet 都扩展了 org.springframework.web.portlet.DispatcherPortlet。Liferay 版本:Liferay DXP 数字企业 7.0.10 GA1任何帮助将不胜感激。让我知道是否有人需要任何澄清。非常感谢,彼得
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

Kyle Stiemann 最近写了一篇关于在 portlet中使用会话的好文章。TL;DR:您正在使用带有前缀属性的 HttpSession "LIFERAY_SHARED_",但您应该使用 portlet 会话:这是 Liferay 管理的,HttpSession 可能是“模拟的”,例如它可能不是 tomcat 管理的对象。


引用他文章中的一个选项:


使用 Liferay session.shared.attributes 前缀(例如 LIFERAY_SHARED_)在不同应用程序/WAR 中的 portlet 之间共享一个或多个会话属性。


Liferay 根据某些前缀值向所有 portlet 公开某些会话属性。尽管这些前缀可以通过 portal-ext.properties 进行配置,但我建议使用默认前缀之一:LIFERAY_SHARED_。


例如:


// Portlet A 

portletRequest.getPortletSession(true)

    .setAttribute("LIFERAY_SHARED_" + CONSTANTS.ATTR_NAME, "value", 

                  PortletSession.APPLICATION_SCOPE);


// Portlet B (in a different WAR) 

String attrValue = portletRequest.getPortletSession(true)

    .getAttribute("LIFERAY_SHARED_" + CONSTANTS.ATTR_NAME, 

                  PortletSession.APPLICATION_SCOPE);

优点:


只向其他 portlet 公开必要的属性(而不是公开整个会话)。

缺点:


向所有 portlet 公开会话属性。

紧密耦合,但不指示哪些其他 portlet 可能正在使用此数据。

共享会话数据的非标准方法。

请注意强烈建议仅使用原始类型作为会话属性。消除对自定义序列化和类加载问题的需求。另请注意,getPortletSession此处需要带有附加范围参数的变体。


但是,尽管这在技术上为您的问题提供了答案,但您还想阅读“会话存储是邪恶的”。


TL;DR:不要使用上述技术。而是消除会话的使用。


查看完整回答
反对 回复 2022-06-08
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号