webuser の認証に spring+tapestry を使用しています。現在ログインしているすべてのユーザーを強制的にログアウトさせることができる手法はあるのでしょうか。たとえば、サイトが「メンテナンス モード」になっているシナリオにいるとします。
p/s: すべてのユーザーの実行中のプロセスを強制的に終了させ、強制的にログアウトさせることはできますか?
次の 2 つのことが頭に浮かびます。
HttpSessionListener
すべてのセッションを追跡し、時が来たらそれらを無効にするために使用します。これを使用するには、 (またはあまり好ましくない - 静的フィールドとして)Set
のSession
オブジェクトが必要です。セッションが作成または破棄されるたびにServletContext
更新し、無効化が必要な場合はセットを繰り返します。Set
特定の条件 ( ) が満たされた場合に、現在のセッションを無効にするFilter
(にマップされた) を使用します。したがって、すべてのユーザーは次のアクションでログアウトされます。これは、「メンテナンスモード」が「サーバー全体を停止する」ことを意味するのではなく、「ユーザーが操作を実行してはならない、干渉されてはならない重要なことをバックグラウンドで行っている」ことを意味する場合に機能します。/*
maintenance == true
問題は、リクエストを終了させてからログアウトさせようとすることです。フォームで保存した場合、データを保存したいのですが、メンテナンスページにリダイレクトする必要があると思います。GET リクエストの場合、メンテナンス フラグが設定されている場合は、ユーザーをログアウトできます。リクエストを完了したいが、サインアウトしてメンテナンス ページにリダイレクトする必要があるため、POST は少し難しくなります。リクエストフィルターを試してみます。通常のようにリクエストを処理しますが、メンテナンス フラグが設定されている場合はセッションを無効にし、response.sendRedirect を使用します。
もう 1 つのオプションは、レイアウトで JavaScript タイマーを使用することです。定期的にページにアクセスして、ログアウトする必要があるかどうかを確認します。ただし、それではおそらく現在のリクエストを完了させることはできません。