legacy-knowledge-base
公開されました Jun. 30, 2025

ワークフロー定義に埋め込まれたgroovyスクリプトからセッションIDを取得する

written-by

Sorin Pop

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • SEO上、自分のウェブサイトの情報を追跡する必要があります。
    そのためにワークフローにgroovyスクリプトを挿入し、ユーザーセッションを取得していますが、セッションIDはnullを返します。
  • 再現の手順
    1. workflow_for_testing.txt に添付されたソースからワークフローを作成する。
    2. Contents&Dataに新しいフォームを作成し、そのワークフローに割り当てる。
    3.
    4. そのページに行き、フォームを一度送信する。
    結果:以下のようなログが表示される。

    セッションはNULLではありません!HttpSessionAdaptor[com.liferay.util.servlet.NullSession#nctk, equinox.http.dynamic-data-mapping-form-web]。

    5.
    結果:「通常の」セッションIDが記録されました。

    セッションはNULLではありません!HttpSessionAdaptor[D46098C43B9A32517696BB5B4D7D7733, equinox.http.dynamic-data-mapping-form-web]。

    それ以降の送信はすべて、実際のセッションIDを記録しているようだ。 (場合によってはヌルも)

環境

  • 7.4

解像度

HttpSessionオブジェクト自体は複数のスレッドで使用することができます (ただしスレッドセーフではないため、同期する必要があります)…。 Asyncメソッドで必要なセッション属性を抽出し、直接渡す。"

  • もし モデルのリスナー モデル・リスナーを作成できれば PortalSessionThreadLocal.getHttpSession() を使ってこれらの属性を抽出できます:

    public class DDMFormInstanceRecordModelListener 
    extends BaseModelListener<DDMFormInstanceRecord> {

    @Override
    public void onBeforeCreate(DDMFormInstanceRecord ddmFormInstanceRecord) throws ModelListenerException {
    HttpSession httpSession = PortalSessionThreadLocal.getHttpSession();
    }
    }

    注意 PortalSessionThreadLocal.getHttpSession() を返します。 を返します。

did-this-article-resolve-your-issue

legacy-knowledge-base