Liferay 会话 mod_jk 问题
Liferay Session mod_jk issue
会话无法使用 mod_jk 负载平衡器(来自 httpd 网络服务器)。但是,相同的代码在应用程序服务器中运行良好。
以下是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
Java Portlet 1 中的代码:
PortletSession portletSession = actionRequest.getPortletSession();
portletSession.setAttribute("username",reg.getFname(), PortletSession.APPLICATION_SCOPE);
JSP Portlet 2 中的代码:
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 页面中获取用户名,它返回空值。但在应用程序服务器中,价值如期而至。请提出建议。
经过大量研究找到了解决方案。因此发布它以帮助他人。有两件事导致了这个问题。
i) sessions 被 httpd 服务器覆盖。在 httpd.conf 中添加了以下 header 标记,这实际上导致了问题。删除它,JSESSION 开始出现。
Header set Set-Cookie HttpOnly;Secure
ii) Session 由于未定义 jvmRoute,亲和力无法正常工作。结果,session 间歇性地终止。所以在每个实例的standalone.xml中添加了子系统web的instance-id,
对于节点0,
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node0" native="false">
对于节点 1,
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node1" native="false">
会话无法使用 mod_jk 负载平衡器(来自 httpd 网络服务器)。但是,相同的代码在应用程序服务器中运行良好。
以下是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
Java Portlet 1 中的代码:
PortletSession portletSession = actionRequest.getPortletSession();
portletSession.setAttribute("username",reg.getFname(), PortletSession.APPLICATION_SCOPE);
JSP Portlet 2 中的代码:
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 页面中获取用户名,它返回空值。但在应用程序服务器中,价值如期而至。请提出建议。
经过大量研究找到了解决方案。因此发布它以帮助他人。有两件事导致了这个问题。
i) sessions 被 httpd 服务器覆盖。在 httpd.conf 中添加了以下 header 标记,这实际上导致了问题。删除它,JSESSION 开始出现。
Header set Set-Cookie HttpOnly;Secure
ii) Session 由于未定义 jvmRoute,亲和力无法正常工作。结果,session 间歇性地终止。所以在每个实例的standalone.xml中添加了子系统web的instance-id,
对于节点0,
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node0" native="false">
对于节点 1,
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node1" native="false">