3

ユーザー情報を DTO オブジェクトとしてセッションに保持する Tomcat 7 の Web アプリケーションがあります。また、ユーザーがセッションを持っていない場合、ユーザーをログインページに自動的にリダイレクトするプロジェクトでSpringセキュリティを有効にしています。

アプリケーションに一度ログインしてから Eclipse で Tomcat を再起動すると、セッションはフラッシュされますが、Cookie は送信されません。

つまり、サーバーの再起動後、セッションに UserDto はありませんが、有効な JSESSIONID はブラウザーに残ります。したがって、春のセキュリティは、実際にはログインしていない場合でも、ユーザーがログインしていると考えています。

なぜこうなった?(Firefoxでページ情報を表示して、JSESSIONID Cookieのタイプを確認しました - Expire: At end of session。したがって、理想的にはサーバーの再起動時に期限切れになるはずですか?)

編集: Firefox は、FirefoxExpire: At end of sessionを閉じて再起動すると、Cookie がまだ残っていると言っていますが。

4

4 に答える 4

1

Web プロジェクトでセッションを使用した場合、Tomcat は自動的に JSESSIONID を生成します。
セッション ID が変更された場合、JSESSIONID が対応して変更されます。JSESSIONID は WEB プロジェクトのセッション ID を示しているためです。
サーバーが停止すると有効期限が切れますが (デフォルトでは 30 分以内に有効期限が切れます)、Cookie は自動的に削除されません。
JSESSIONID は、Tomcat の server.xml ファイルで構成できます。

于 2013-06-17T08:21:55.607 に答える
1

Cookie はブラウザーに保持されます。サーバーが再起動してもブラウザーは引き続き実行され、Cookie を保持し、次の要求でサーバーに提示します。

サーバー側では、複数のオプションがあります。Tomcat の SessionManager を構成して、ディスクに保持し、再起動時にコンテンツを読み取ることができます。これは、クラスター内の複数の Tomcat 間でセッションを分散するためにも使用されるオプションです。ディスクに保存すると、サーバーはセッションを「ただ」デシリアライズするだけでセッションを続行できます。暗示されるコストがいくつかあります(セッションを常にシリアル化する必要があるため)

現在、これより具体的なヒントを提供することはできませんが、調べて、Cookie の保存場所の違い、サーバーの再起動時に変更されない理由、および tomcat のドキュメントを参照する必要があることを理解している場合セッションマネージャーのおかげで、うまくいけばそれを理解できるでしょう。

于 2013-06-17T08:19:55.653 に答える
0

ログインに成功すると、SpringSecurity はブラウザに Cookie を保存します。

ブラウザがリクエストを送信すると、SpringSecurity は Cookie の内容をチェックします。SpringSecurity が以前に保存した値を見つけた場合、ログインしていると見なされるため、SpringSecurity はログイン ページにリダイレクトしません。

于 2013-06-18T02:04:38.303 に答える