【问题标题】:Liferay on weblogic doesn't invalidate portlet sessionweblogic 上的 Liferay 不会使 portlet 会话无效
【发布时间】:2016-01-28 12:11:51
【问题描述】:

我在 WebLogic 服务器 10.3.6.0 上使用 Liferay 6.2 GA4 门户,我发现了一个烦人的问题。

  1. 我以 UserA 身份登录。
  2. 显示将数据存储到 portlet 会话的 portlet。
  3. 我退出了。
  4. 我以 UserB 身份登录。
  5. 显示将数据存储到 portlet 会话的同一 portlet。
  6. Portlet 显示的是 UserA 而不是 UserB 的数据

我通过 ext-plugin 向 com.liferay.portal.kernel.servlet.PortletSessionListenerManagercom.liferay.portal.kernel.servlet.PortletSessionTracker 添加了一些调试日志消息,发现传递给 PortletSessionTracker.add 方法的会话 (sessionId) 与传递给 PortletSessionTracker.add 方法的会话 (sessionId) 不同strong>无效方法。请参阅下面的日志消息:

2016-01-28 10:38:34,191 [PortletSessionTracker:40] 添加 id=4s6HmE3LdwWuUdOilk7-ytJLqJh1LnCiTKzoeH9YVSBM2USJuxU9 的会话 2016-01-28 10:40:38,875 [PortletSessionListenerManager:187] 销毁会话 id=S4qHmPDaSTLkwkmEo6gDLt4W0U-siGlU_GNa1LJelXTtQvSaRyEd 2016-01-28 10:40:38,875 [PortletSessionTracker:73] 删除 id=S4qHmPDaSTLkwkmEo6gDLt4W0U-siGlU_GNa1LJelXTtQvSaRyEd 的会话 com.liferay.portal.kernel.servlet.PortletSessionTracker#invalidate 中的

session.invalidate(); 未被调用。
portlet 中没有错误,因为在 Tomcat 上它可以正常工作。并在 Tomcat 上调用 session.invalidate();

Weblogic.xml:

<weblogic-web-app
        xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd"
        >
    <jsp-descriptor>
        <keepgenerated>true</keepgenerated>
        <page-check-seconds>60</page-check-seconds>
    </jsp-descriptor>

    <session-descriptor>
        <debug-enabled>true</debug-enabled>
        <persistent-store-type>replicated_if_clustered</persistent-store-type>
        <cookie-secure>true</cookie-secure>
    </session-descriptor>

    <container-descriptor>
        <filter-dispatched-requests-enabled>false</filter-dispatched-requests-enabled>
        <prefer-application-packages>
            <package-name>antlr.*</package-name>
            <package-name>com.ctc.wstx.*</package-name>
            <package-name>org.antlr.*</package-name>
            <package-name>org.apache.commons.lang.*</package-name>
            <package-name>org.mozilla.*</package-name>
            <package-name>org.xmlpull.*</package-name>
        </prefer-application-packages>
        <optimistic-serialization>true</optimistic-serialization>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>

    <context-root>/</context-root>

    <wl-dispatch-policy>ejbtp_liferay</wl-dispatch-policy>

</weblogic-web-app>

有人知道可能是什么问题吗?感谢您的任何想法或帮助。

【问题讨论】:

  • 几年没用LR了。它保留了一个会话,该会话(通过 cookie?)保留在客户端上。 LR 会话被设计成有状态的。会话管道可能会被重用长达半小时(服务器中有一个超时设置)。这个组合可能是你正在运行的。 LR 管理员通过菜单交换用户没有这个问题。在 LR 和 Weblogic 中查找“保持会话”超时。

标签: session liferay weblogic


【解决方案1】:

这个问题有一个棘手的原因。我们的客户希望会话 ID cookie 具有不同的名称 - 而不是默认的 jsessionid。我在 liferay 门户战争上设置了修改后的 jsessionid,但没有在主题和 portlet 应用程序等其他战争上设置。因此,这些战争使用了默认的 jsessionid,而门户网站使用了修改后的 jsessionid。 add 方法使用默认的一种,invalidate 方法使用修改的一种。

所以解决方案是在 portlet 和主题战争中修改 session id cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2013-04-27
    相关资源
    最近更新 更多