繁体   English   中英

Liferay Session mod_jk问题

[英]Liferay Session mod_jk issue

该会话不适用于mod_jk负载平衡器(来自httpd Web服务器)。 但是,相同的代码在应用程序服务器中运行正常。

以下是worker.properties:

worker.list=loadbalancer,status,web

worker.node0.port=8009
worker.node0.host=10.50.26.19
worker.node0.type=ajp13
worker.node0.lbfactor=1
worker.node0.socket_keepalive=false

worker.node0.connect_timeout=10000
worker.node0.prepost_timeout=10000
worker.node0.socket_timeout=60

worker.node0.connection_pool_timeout=600

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node0
worker.loadbalancer.sticky_session=1

Portlet 1中的Java代码:

PortletSession portletSession = actionRequest.getPortletSession();
portletSession.setAttribute("username",reg.getFname(), PortletSession.APPLICATION_SCOPE);

Portlet 2中的JSP代码:

PortletSession portletSessionobject = renderRequest.getPortletSession();
userName=(String)portletSessionobject.getAttribute("username",PortletSession.APPLICATION_SCOPE);

在两个portlet中,以下属性已在liferay-portlet.xml中应用

<private-session-attributes>false</private-session-attributes>

但是无法在Web服务器的Portlet 2 JSP页面中获取用户名,它返回null。 但是在应用程序服务器中,该值如预期般来了。 请提出建议。

经过大量研究,找到了解决方案。 因此发布它以帮助他人。 造成此问题的原因有两点。

i)会话被httpd服务器覆盖。 在httpd.conf中添加了以下标头标记,这实际上是导致该问题的原因。 删除它,JSESSION开始出现。

Header set Set-Cookie HttpOnly;Secure

ii)由于未定义jvmRoute,因此会话关联性无法正常工作。 结果,会话间歇性地终止。 因此,在每个实例的standalone.xml中添加了子系统Web的实例ID,

对于node0,

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node0" native="false">

对于node1,

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node1" native="false">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM