weblogic 上的 Liferay 不会使 portlet 会话无效

Liferay on weblogic doesn't invalidate portlet session

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

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

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

2016-01-28 10:38:34,191 [PortletSessionTracker:40] Adding session with id=4s6HmE3LdwWuUdOilk7-ytJLqJh1LnCiTKzoeH9YVSBM2USJuxU9
2016-01-28 10:40:38,875 [PortletSessionListenerManager:187] Destroying session with id=S4qHmPDaSTLkwkmEo6gDLt4W0U-siGlU_GNa1LJelXTtQvSaRyEd
2016-01-28 10:40:38,875 [PortletSessionTracker:73] Removing session with id=S4qHmPDaSTLkwkmEo6gDLt4W0U-siGlU_GNa1LJelXTtQvSaRyEd

session.invalidate();com.liferay.portal.kernel.servlet.PortletSessionTracker#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>

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

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

所以解决方案是在 portlet 和主题 wars.

中也修改会话 ID cookie