【问题标题】:Liferay Session mod_jk issueLiferay Session mod_jk 问题
【发布时间】:2018-03-22 09:52:09
【问题描述】:

会话无法使用 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。但在应用程序服务器中,价值正在按预期出现。请提出建议。

【问题讨论】:

    标签: java jsp session liferay mod-jk


    【解决方案1】:

    经过大量研究找到了解决方案。因此发布它以帮助他人。有两件事会导致此问题。

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

    Header set Set-Cookie HttpOnly;Secure
    

    ii) 由于未定义 jvmRoute,会话关联性无法正常工作。结果,会话间歇性地终止。所以在每个实例的standalone.xml中添加了subsystem 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">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2018-10-27
      相关资源
      最近更新 更多