Liferay的7共享会话属性

问题描述 投票:1回答:1

我试图用Liferay的共享会话属性。

我想使用相同的属性基于在不同的URL-S使用下面的代码不同WAR文件的两个不同的portlet:

Liferay 7 not able to set the global session attribute

价值我想保存:单串

设置在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有:

<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

任何帮助将不胜感激。让我知道,如果有人需要任何澄清。

非常感谢,彼得

java tomcat liferay
1个回答
3
投票

凯尔Stiemann最近写在portlet的nice article on using sessions。 TL; DR:您正在使用与属性前缀"LIFERAY_SHARED_" HttpSession中,但你应该使用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与额外的范围参数的变化就在这里需要。

但是,不亚于这在技术上提供了一个回答你的问题,你也想读"Session Storage is Evil"

TL; DR:不要使用上面的方法。相反杜绝使用会话。

© www.soinside.com 2019 - 2024. All rights reserved.