3

10 個の Web アプリケーションをデプロイした Tomcat サーバーがあります。あるアプリケーションからの着信要求 (「A」など) を読み取り、特定の Cookie 値を読み取り、Cookie の値に基づいてデータベースから別のコンテキスト名 (「B」など) を取得するフィルターがあります。次に、このフィルターは、コンテキスト A (例http://1.1.1.1/A/XYZServlet) を持つ要求を、コンテキスト B (例 ) を持つ新しい要求に書き換えhttp://1.1.1.1/B/XYZServletます。

これを行うと、新しいリクエストが実行されると、すべてのセッション変数が失われます。フィルターが古いリクエスト (コンテキスト A) を新しいリクエスト (コンテキスト B) にリダイレクトするときに、セッションとすべてのセッション変数 (コンテキスト A に関連する) が保持されるようにするにはどうすればよいですか? 特定のアーキテクチャ上の理由により、server.xml で emptySessionPath = "true" を設定することは解決策になりません。

4

1 に答える 1

0

Tomcat セッションは、単一の Web アプリケーションに限定されます。あなたの場合、別のコンテキストに切り替えると、セッション データは失われませんが、新しいコンテキストには適用されません。スコープはセッション cookie のパスによって制御されます。これには、作成中の Web アプリケーションのコンテキストが含まれるため、そのコンテキスト内の要求に対してのみ Tomcat に送信されます。

セッションのスコープを拡張したい場合、いくつかのオプションが思い浮かびます: セッション Cookie を (JSESSIONIDデフォルトで) ルート コンテキスト パスに変更できます/。しかし、セッション Cookie の管理は Tomcat に非常に深く組み込まれており、(不可能ではないにしても) 変更するのは困難です。以前、セッション Cookie を固定の有効期間で永続化するように変更しようとしましたが、その方法が見つかりませんでした。

エレガントではありませんが、おそらく機能する方法は、セッション Cookie を複製することです。機能するかどうかはわかりませんが、フィルターでセッション Cookie を読み取り、ターゲット コンテキストをパスとして複製を作成できます。後続のリクエストでは、偽のセッション Cookie が含まれ、以前のセッション データが利用可能になる可能性があります。

于 2012-10-31T14:00:06.893 に答える