0

次の要件があります

  1. 複数の JAR。それぞれが埋め込まれた Jetty を実行しています。
  2. 全員を同じドメイン/ポートで実行 - リバース プロキシ (Apache) を使用
  3. JAR は、異なるマシンで (同じホスト/ポートの下で) 実行されている複数のインスタンスを持つことができます。
  4. 完全なセッション分離 - 同じ webapp の 2 つのインスタンス間でも共有はまったくありません。
  5. これをすべて動的にスケーリングします。
  6. これが関連しているかどうかはわかりませんが、Spring Security がこれらの Web アプリの一部で使用されていることは知っています。

リバース プロキシ ルールを追加して Apache を再起動することで、すべてを稼働させました。以下は、webapp-1 の 2 つのインスタンスと webapp-2 の 2 つのインスタンスの簡単な説明です。

http://mydomain.com/app1 ==> 1.1.1.1:9099
http://mydomain.com/app2 ==> 1.1.1.1:9100
http://mydomain.com/app3 ==> 1.1.1.2:9099
http://mydomain.com/app4 ==> 1.1.1.2:9100

これを (ほぼ) 正常にセットアップした後、JSESSIONID cookie に問題が発生します。すべてのアプリは他のアプリの Cookie をオーバーライドします。つまり、一方が他方に影響を与えるため、完全なセッション分離をまだ実現していません。

この問題についてオンラインでよく読んでいますが、私のシナリオでは解決策が十分ではありません。

私にとって理想的な解決策は、Cookie 名に何らかの UUID を使用するように JETTY を定義することです。これがデフォルトではない理由はまだわかりません。

私は、JavaScript ソリューションを使用することさえあります。JavaScript には、ReverseProxy 操作後に URL が表示されるという利点があります。そのため、http://mydomain.com/XXXCookie 名を と定義できますXXX_JSESSIONID

しかし、これらのハウツーが見つかりません。

では、これを解決してセッションを完全に分離するにはどうすればよいでしょうか?

4

1 に答える 1

1

使用しているセッション マネージャーと、それが提供する機能/利点を理解するために、ある程度の時間を費やす必要があります。利用可能なデータベースがなく、カスタム セッション マネージャーがない場合は、単一のホストでのみセッション管理に使用できる、配布されている HashSessionManager を使用していると思われます。このインスタンスでは、jvm 間のセッション共有はありません。 .

上記が示すように、4 つの個別の jvm プロセスを実行している (そして HashSessionManager を使用している) 場合、ノード間で共有されるセッションはありません。

また、各アプリケーションのセッション ID 変数の名前を変更しようとしているようです。これを行うには、アプリケーションごとに異なる名前を設定するだけです。

http://www.eclipse.org/jetty/documentation/current/session-management.html

各 webapp コンテキストに新しい org.eclipse.jetty.servlet.SessionCookie 名を設定すると、当面の問題に対処できます。

于 2013-04-26T12:48:09.610 に答える